IOC容器及相关概念
什么是 IOC
- 控制反转,把对象创建和对象之间的调用过程,交给 Spring 容器来管理。
- 使用 IOC 的目的,为了解耦合。
IOC 的底层原理
XML、解析技术、工厂模式、反射
IOC 目的
最低限度降低类与类之间的耦合度
IOC 实现
- IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂。
- Spring 提供了 IOC 容器两种实现方式
- (1) BeanFactory:IOC 容器基本实现接口,是 Spring 内部使用 的接口,不提供给开发人员使用
- (2) ApplicationContext:BeanFatory 接口的子接口,提供了更 多更强大的功能,一般由开发人员来使用
IOC 操作:Bean 管理
在bean标签中有很多属性,介绍常用属性
- id属性:唯一标识
- class属性:类全路径(包+类路径)
- name属性:类似于id的作用,struts2框架提供的属性,被id属性代替.
bean标签创建对象时,默认执行的是无参构造器完成对象创建
什么是 Bean 管理
- Spring 创建对象
- Spring 注入属性
Bean 管理操作的两种实现方式
- 基于 XML 配置文件的方式
- 基于注解方式
Bean标签范围配置
1.当scope=“singleton”时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置Bean实例。
Bean的生命周期:
- 对象创建:当应用加载,创建容器时,对象就被创建了
- 对象运行:只要容器在,对象就一直活着
- 对象销毁:当应用卸载,销毁容器时,对象就被销毁
2.当scope=“prototype”时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:
- 对象创建:当使用对象时,创建新的对象实例
- 对象运行:只要对象在使用中,就一直活着
- 对象销毁:当对象长时间不用时,被Java的垃圾回收器回收了
Bean生命周期配置
- init-method:指定类中的初始化方法名称
- destory-method:指定类中销毁方法名称
Bean实例化的三种方法
- 无参构造方法实例化
- 工厂静态方法实例化
- 工厂实例方法实例化
无参构造方法实例化代码演示
(1)创建接口
public interface UserDao {
public void save();
}
(2)实现接口方法
public class UserDaoImpl implements UserDao {
public void save(){
System.out.println("save running.....");
}
}
(3)配置xml文件
<bean id="userDao" class="com.wzx.dao.impl.UserDaoImpl">
</bean>
(4)测试方法
public class UserDaoDemo {
public static void main(String[] args) {
ApplicationContext app=
new ClassPathXmlApplicationContext("bean02.xml");
UserDao userDao= (UserDao) app.getBean("userDao");
userDao.save();
}
}
(5)运行结果
工厂静态方法实例化代码演示:在无参构造的基础上修改
(1)创建静态工厂类
public class StaticFactory {
//静态方法
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
(2)修改xml配置文件
<bean id="userDao" class="com.wzx.factory.StaticFactory"
factory-method="getUserDao">
</bean>
工厂实例方法实例化代码演示:在无参构造的基础上修改
(1)创建工厂对象
public class DynamicFactory {
//不是静态的
public UserDao getUserDao() {
return new UserDaoImpl();
}
}
(2)修改xml配置文件
<bean id="factory" class="com.wzx.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory"
factory-method="getUserDao"></bean>
本文含有隐藏内容,请 开通VIP 后查看