美文网首页
Spring学习笔记day01

Spring学习笔记day01

作者: 7_px | 来源:发表于2019-08-13 14:09 被阅读0次

    Spring笔记

    spring IOC 环境搭建

    • 导入spring依赖

    <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies>

    • resources下新建bean.xml配置文件导入约束

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    • xml中创建bean对象
      <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" />

    • 获取Spring核心容器类
      ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");

    • 根据配置中的id,从核心容器中获取想要的类对象
      IAccountService accountService = (IAccountService) ac.getBean("accountService23");

    Spring创建bean的3种方式

    1、使用默认构造函数创建。只有id与class标签没有其他属性标签的时候可以用,如果对象中没有默认构造函数则会报错。

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" />
    

    2、 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象存入容器)

    <bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"/>
    
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"/>
    

    3、 使用静态工厂中的静态方法创建对象(使用某个类中的静态方法创建对象)

     <bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"/>
    

    bean的作用范围

    bean标签的scope标签用于指定标签的作用范围 常用的singleton prototype request 还有个全局的globe啥的...

    spring中的依赖注入 dependency injection

    什么是依赖注入:
    在当前类中需要用到其他类对象 由spring为我们提供, 我们只需要在配置文件中说明
    依赖关系的维护就叫做 依赖注入

    依赖注入的数据类型

    1. 基本类型和String
    2. 其他的bean类型(在配置文件中或者注解配置过的bean)
    3. 复杂类型/集合类型

    注入的方式

    1. 使用构造函数提供
    2. 使用set方法提供
    3. 使用注解提供

    构造函数注入 (只有必须必须使用的时候才用 一般不用)

    受用标签: constructor-arg

    在bean标签内部
    type: 要注入的数据类型 , 该数据类型也是构造函数中某个或某些的数据类型
    index: 用于指定要注入的数据给构造函数中指定索引位置的参数赋值。 参数索引的位置从0开始
    name : 用于指定给构造函数中指定名称的参数赋值 ( 常用的 )
    ==以上三个用于指定给哪个参数给构造函数中哪个参数赋值==
    value: 用于基本类型和String类型
    ref:用于其他的bean类型数据。 它指的就是在spring ioc核心容器中出现过的bean对象

    构造函数注入的优势:

    在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功

    弊端:

    改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这些数据也必须提供

    示例代码:

     <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
            <constructor-arg name="name" value="Test"/>
            <constructor-arg name="age" value="18"/>
            <constructor-arg name="birthday" ref="now"/>
        </bean>
        <!--    由于构造函数中的DATE对象不能直接用value来赋值 , 所以需要我们再额外配置一个date对象-->
    <!--    这句代表含义: spring读取class标签下的全限定类名, 反射创建一个对象,并且存入spring的核心容器中, 我们可以通过id拿到这个对象 -->
        <bean id="now" class="java.util.Date"/>
    

    set方式注入 (常用)

    涉及的标签:property
    出现位置:bean标签的内部
    标签的属性
    name : 用于指定注入时调用的set方法名称
    value: 用于基本类型和String类型
    ref:用于其他的bean类型数据。 它指的就是在spring ioc核心容器中出现过的bean对象

    优势: 创建对象时没有明确的限制,可以直接使用默认构造函数。
    弊端: 如果有某个成员必须有值 , 则获取对象时有可能set方法没有执行。

    复杂类型的注入 (集合的注入)

    用于给List结构集合注入的标签:
    list array set
    用于给Map 结构集合注入的标签:
    map props

    示例代码:
     <bean id="accountService23" class="com.itheima.service.impl.AccountServiceImpl23">
        <property name="myStrs">
            <array>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </array>
        </property>
    
        <property name="lists">
            <list>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </list>
        </property>
    
        <property name="mySet">
            <set>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </set>
        </property>
    
        <property name="myMaps">
            <map>
                <entry key="testA" value="aaa"/>
                <entry key="testB">
                    <value>AAA</value>
                </entry>
            </map>
        </property>
        
        <property name="myProps">
            <props>
                <prop key="testC">CCC</prop>
                <prop key="testD">DDD</prop>
            </props>
        </property>
    
    </bean>
    

    相关文章

      网友评论

          本文标题:Spring学习笔记day01

          本文链接:https://www.haomeiwen.com/subject/tzgvjctx.html