IOC 控制反转

将目标对象的创建权力由最初的消费者转嫁给中间的角色,这个中间角色负责将对象创建并进行统一的集中管理,这个集中管理的容器叫IOC控制反转容器

  • 由代理人来创建和管理对象,消费者通过代理人来获取对象
  • 目的是降低对象之间直接耦合
  • 加入 IOC容器 将对象统一管理,让对象关联变为弱耦合

image.png

DI 依赖注入

  • IOC是设计理念,是现代程序设计遵循的标准,是宏观目标
  • Dependency Injection 是微观实现
  • DI 在java 中利用反射实现对象注入

需要的xml spring-context

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context<artifactId/>
  4. </dependency>
  1. applicationContext.xml
  2. // id 代表在spring ioc 中代表的唯一编号。 class 是指那个类, property 指属性设置
  3. <bean id="sweetApple" class="com.imooc.entity.Apple">
  4. <property name="title" value="红色"></property>
  5. </bean>

xml方式创建IOC容器

  1. ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

三种xml 实例化Bean 的方式

1. 基于构造方法实例化对象

1.1 无参构造方法

  1. <bean id="sweetApple" class="com.imooc.entity.Apple">
  2. </bean>

1.2 带参数的构造方法实例化
image.png

2. 基于静态工厂实例化对象
  1. <bean id="apple4" class="com.imooc.factory.AppleStaticFactory" factory-method="createSweetApple">
  2. </bean>

3. 基于工厂实例方法实例化对象
  1. <bean id="factoryInstance" class="com.imooc.factory.AppleFactoryInstance"></bean>
  2. <bean id="apple5" factory-bean="factoryInstace" factory-method="createSweetApple"></bean>

从IOC容器中获取bean

  1. // xml中
  2. <bean id="sweetApple" class="com.imooc.entity.Apple">
  3. <property name="title" value="红色"></property>
  4. </bean>
  5. // java 中
  6. Apple sweetApple =contexnt.getBean("sweetApple",Apple.class);

bean id和name都是设置在IOC中 的唯一标识,在同一配置文件中不允许重复
多个配置文件可以重复, 新对象覆盖旧的

IOC 路径表达式

  1. // 加载当前类路径下的 applicationContext.xml 文件
  2. classpath://applicationContext.xml

image.png

对象依赖注入

  • 依赖注入是指运行时将容器内对象利用反射赋给其他对象的操作
  • 基于setter 方法注入对象
  • 基于构造方法注入对象

注入list
image.png
注入set
image.png
注入 map
image.png
注入 properties
image.png

查看容器内对象

  1. // 获取容器内所有的beanId 数组
  2. String[] beanName=context.getBeanDefinitionNames();

brea scope属性

  • 用于决定对象何时被创建与作用范围
  • 影响容器内对象的数量
  • 默认值为 singleton 单例 指全局共享同一个对象实例, singleton在容器中单例多线程运行, 属于线程安全
  • 默认情况下会在ioc 容器创建后自动实例化 全局唯一

image.pngimage.png

bean 的生命周期

image.png

自动装配注解

image.png
元数据注解
image.png