文章目录
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)注意
- 如果全局、局部均设置了自动装配,则按照就近原则
- 大型项目不建议使用,自动装配的可读性比较低
- 自动装配一般只装配 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的生命周期
- 实例化
- 属性赋值
- 初始化
- 接口初始化 InitializingBean
- 属性初始化init-method
- 操作使用
- 销毁
- 接口销毁 DisposableBean
- 属性销毁 destory-method
四、bean的作用域
可以主动设置 bean 作用域,通过 scope = “属性”
属性:
-
singleron --------------> 单例、性能较高,但安全性较低(单例是指不管调用多少次 getBean()方法,都只会创建一次实例)
-
prototype ---------------> 多例,性能较低,但安全性高(多例是指调用一次 getBean()方法,就会创建一次实例)
web 环境下
-
request --------------> 一个请求创建一个JavaBean
-
session ----------------> 一个会话创建一个javaB