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 的生命周期
自动装配注解

元数据注解
