IOC 控制反转
将目标对象的创建权力由最初的消费者转嫁给中间的角色,这个中间角色负责将对象创建并进行统一的集中管理,这个集中管理的容器叫IOC控制反转容器
- 由代理人来创建和管理对象,消费者通过代理人来获取对象
- 目的是降低对象之间直接耦合
- 加入 IOC容器 将对象统一管理,让对象关联变为弱耦合
DI 依赖注入
- IOC是设计理念,是现代程序设计遵循的标准,是宏观目标
- Dependency Injection 是微观实现
- DI 在java 中利用反射实现对象注入
需要的xml spring-context
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context<artifactId/>
</dependency>
applicationContext.xml
// id 代表在spring ioc 中代表的唯一编号。 class 是指那个类, property 指属性设置
<bean id="sweetApple" class="com.imooc.entity.Apple">
<property name="title" value="红色"></property>
</bean>
xml方式创建IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
三种xml 实例化Bean 的方式
1. 基于构造方法实例化对象
1.1 无参构造方法
<bean id="sweetApple" class="com.imooc.entity.Apple">
</bean>
2. 基于静态工厂实例化对象
<bean id="apple4" class="com.imooc.factory.AppleStaticFactory" factory-method="createSweetApple">
</bean>
3. 基于工厂实例方法实例化对象
<bean id="factoryInstance" class="com.imooc.factory.AppleFactoryInstance"></bean>
<bean id="apple5" factory-bean="factoryInstace" factory-method="createSweetApple"></bean>
从IOC容器中获取bean
// xml中
<bean id="sweetApple" class="com.imooc.entity.Apple">
<property name="title" value="红色"></property>
</bean>
// java 中
Apple sweetApple =contexnt.getBean("sweetApple",Apple.class);
bean id和name都是设置在IOC中 的唯一标识,在同一配置文件中不允许重复
多个配置文件可以重复, 新对象覆盖旧的
IOC 路径表达式
// 加载当前类路径下的 applicationContext.xml 文件
classpath://applicationContext.xml
对象依赖注入
- 依赖注入是指运行时将容器内对象利用反射赋给其他对象的操作
- 基于setter 方法注入对象
- 基于构造方法注入对象
注入list
注入set
注入 map
注入 properties
查看容器内对象
// 获取容器内所有的beanId 数组
String[] beanName=context.getBeanDefinitionNames();
brea scope属性
- 用于决定对象何时被创建与作用范围
- 影响容器内对象的数量
- 默认值为 singleton 单例 指全局共享同一个对象实例, singleton在容器中单例多线程运行, 属于线程安全
- 默认情况下会在ioc 容器创建后自动实例化 全局唯一
bean 的生命周期
自动装配注解
元数据注解