SpringIOC 容器(进阶)

SpringIOC 容器

一、Bean 的自动装配

1、手动装配

手动的在bean 标签中设置name 等属性,也就是一些子标签需要自己手动的设置

<constructor-arg></constructor-arg>
<property></property>
<!--============================手动装配子标签属性=====================================-->
<bean id="ControllerImpl" class="com.apesource.controller.ControllerImpl">
        <property name="serviceimpl" ref="serviceimpl"></property>
</bean>

<bean id="student" class="com.apesource.pojo.Student">
        <constructor-arg name="name" value="111"></constructor-arg>
        <constructor-arg name="age" value="21"></constructor-arg>
</bean>

2、自动装配

(1)语法

  • autowire = “属性值” ----------> bean标签---->局部设置
  • default-autowire = “属性值” ------------>beans标签—>全局设置

(2)属性

  • byName------------->通过set方法按照名称自动装配,属性名称与 bean 的 id 相匹配

  • byType------------->通过set方法按照类型自动装配,属性类型与 bean 的 class 相匹配

  • constructor-------->通过构造方法按照自动装类型配,属性类型与 bean 的 class 相匹配

  • no

(3)注意

  1. 如果全局、局部均设置了自动装配,则按照就近原则
  2. 大型项目不建议使用,自动装配的可读性比较低
  3. 自动装配一般只装配 JavaBean

二、bean 的实例化

1、通过类的无参构造方法实例化(默认)

就是将类放入spring容器中,然后用反射的方式加载类,在通过类的无参构造方式实例化对象

(1)在主配置文件中加载类,即将类放入spring容器里

<bean id="ControllerImpl" class="com.apesource.controller.ControllerImpl">
        <property name="serviceimpl" ref="serviceimpl"></property>
</bean>

(2)通过获取容器对象,使用 ==grtBean()==方法获取指定类的对象

// 获取容器对象
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
// 获取指定类的对象(实例化对象)
Student student= (Student) applicationContext.getBean("student");
Controller controller= (Controller) applicationContext.getBean("controllerImpl");
controller.save();
System.out.println(student);

2、通过指定工厂创建对象

就是spring容器将创建对象的控制权交给一个指定工厂

(1)在主配置文件中加载类,即将类放入spring容器里,以及将工厂也注入到容器里

<bean id="student" class="com.apesource.pojo.Student" factory-bean="factory" factory-method="creatStu"></bean>
<bean id="factory" class="com.apesource.factory.BeansFactory"></bean>

3、通过指定静态工厂创建对象

只是将工厂中的方法改为静态方法

三、bean的生命周期

  1. 实例化
  2. 属性赋值
  3. 初始化
    • 接口初始化 InitializingBean
    • 属性初始化init-method
  4. 操作使用
  5. 销毁
    • 接口销毁 DisposableBean
    • 属性销毁 destory-method

四、bean的作用域

可以主动设置 bean 作用域,通过 scope = “属性”

属性:

  • singleron --------------> 单例、性能较高,但安全性较低(单例是指不管调用多少次 getBean()方法,都只会创建一次实例

  • prototype ---------------> 多例,性能较低,但安全性高(多例是指调用一次 getBean()方法,就会创建一次实例

    web 环境下

  • request --------------> 一个请求创建一个JavaBean

  • session ----------------> 一个会话创建一个javaB

你可能感兴趣的:(java,eclipse,spring,spring,boot)