sping相关

ioc:
    作用:降低模块之前的耦合
    依赖关系的管理:交给spring框架
    依赖:在当前类需要使用其他类或者对象。

1:spring中bean创建的三种方式

1.1:使用默认构造函数创建

在spring的配置文件中使用bean标签,配以id+class属性之后,且没有其他属性和标签时,采用的就是默认构造函数创建bean对象。如果该类中没有默认构造函数的话,则对象无法创建。

<bean id="instanceIml" class="com.newcapec.service.impl.InstanceIml"></bean>

1.2:使用普通工厂中的方法创建(使用某个类中的方法创建对象,并存入spring容器,适用于使用jar包中的方法)

<bean id="instanceIml" class="com.newcapec.service.impl.InstanceIml"></bean>
<bean id="accountIml" factory-bean="instanceIml" factory-method="getAccountService"></bean>

1.3:使用普通工厂中的静态方法创建

<bean id="instanceIml" class="com.newcapec.service.impl.InstanceIml" factory-method="getAccountService">

2.spring中bean的作用范围

    2.1:single 单例模式(默认)
    2.2:prototype 多例模式
    2.3:request 作用于web应用的请求范围
    2.4:session 作用于web应用的会话范围。例如登录界面验证码的比对
    2.5:global-session 作用于集群环境的会话范围,如果不是集群的,作用域等同于session。列如负载均衡时会话的作用域

3.bean的生命周期

3.1:单例模式

出生:当容器创建时对象初始化。(初始化xml文件)
活着:只要容器还在,对象就一直还在
销毁:容器销毁则对象死亡。
总结:单例的生命周期和容器相同。

3.2:多例模式

出生:当我们使用对象时,spring框架为我们初始化实例。
活着:对象只要被使用/引用,则一直存活。
销毁:当我们长时间不使用/引用,由java的垃圾回收机制回收销毁。

4.di

依赖关系的维护就称为依赖注入

4.1 能注入的数据:三类
    4.1.1 基本数据类型和String
    4.1.2 其他bean类型(在配置文件中或者注解配置过的bean)
    4.1.3 复杂类型/集合类型
        用于给List结构的集合注入标签:
            List array set
        用于给Map结构的集合注入的标签:
            Map props
4.2 注入方式:三种
    公共bean
    <bean id="now" class="java.util.Date"></bean>
    4.2.1 构造方法注入
        有参构造:
            使用的标签:constructor-arg
            标签的位置:bean标签的内部
            标签的属性:
                type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
                index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始
                name:用于指定给构造函数中指定名称的参数赋值。
                value:用于提供基本类型和String类型的数据。
                ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现的bean对象。
              <bean id="accountService" class="com.newcapec.service.impl.accountServiceImpl">
                <constructor-arg name="name" value="111"></constructor-arg>
                <constructor-arg name="birthday" ref="now"></constructor-arg>
             </bean>
    4.2.2 set方法注入
        默认无参构造:
            使用的标签:property
            标签的位置:bean标签的内部
            标签的属性:
                name:用于指定注入时调用的set方法名称。
                value:用于提供基本类型和String类型的数据。
                ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现的bean对象。
            优势:
                创建对象时没有明确的限制,可以直接使用默认构造函数。
            劣势:
                如果有某个成员必须优质,则获取对象的时候set方法有可能没有注入
            <bean id="accountService" class="com.newcapec.service.impl.accountServiceImpl">
               <property name="name" value="111"></property>
               <property name="birthday" ref ="now"></property>
             </bean>
    4.2.3 注解注入
        <bean id="accountService" class="com.newcapec.service.impl.accountServiceImpl" scope="" init-method="" destroy-method="">
           <property name="" value="" ref=""> </property>
        </bean>
        用于创建对象的
            他们的作用就和在xml中编写一个<bean>作用相同.
            Component:
                作用:用于把当前类对象存入spring容器中
                属性:value,用于指定bean的id,不写则默认为该类名首字母小写
            Controller:一般用于表现层
            Service:一般用于业务层
            Repository:一般用于持久层也就是dao层
                他们三个的作用和Component一样,他们为spring为我们提供明确的划分。当项目中不止该三层业务时,可以使用Component
            
        用于注入数据的
            他们的作用就和在xml中的<bean>标签写<property>作用相同
            Autowired:
                作用:    自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
                如果ioc容器中有多个类型匹配时:
                出现位置:
                    可以在变量上,也可以在方法上。
                细节:
                    在使用注解注入是,set方法就不是必须的了。
                Qualifier:
                    作用:在按照类注入的基础之上再按照名称注入,再给类成员注入时不能单独使用,方法时可以。
                    属性:
                        value:用于指定注入的bean的id
                Resource:
                    作用:直接按照bean的id注入,可以单独使用。
                    属性:
                        name:指定bean的id
                以上三个注入都只能注入其他bean类型的数据,基本类型和String类型无法使用上述注解实现。另外,集合类型的注入只能通过xml来实现。
            value:
                作用:用于注入基本数据类型和String类型
                属性:
                    value:用于指定数据的值,可以使用spel表达式。
                    
                
        用于改变作用范围的
            他们的作用就和在xml中的<bean>标签中的scope属性相同
            scope:
                作用:用于指定bean的作用范围
                属性:
                    value:单例,多例
        和生命周期相关的
            他们的作用就和在xml中的<bean>标签的init-method和destroy-method相同
        pridestroy:销毁方法
        postconstruct:初始化方法
posted @ 2020-06-24 21:33  Erosions  阅读(113)  评论(0)    收藏  举报