IoC (Inversion of control 控制反转) 或者也可以称为 DI (Dependecy Injection 依赖注入)
对象仅通过 构造函数参数、工厂方法的参数 或者 属性 对象实例被构造后设置的属性 或者 从工厂方法返回后再对象实例上设置的属性 来定义它们的依赖项。这个过程是Bean本身的逆过程,所以叫做控制反转。
IoC的实现:
org.springframework.beans , org.springframework.context
BeanFactory 提供了管理任何对象的高级配置机制
ApplicationContext 应用上下文 , 是BeanFactory的子接口。
什么是bean?
构成应用程序主体并且由Spring ioc 管理的对象称之为bean。bean是由spring ioc 实例化、组装和管理的对象。
DI / IOC: - 依赖注入 / 控制反转
当需要另一个实例时,传统是new 一个对象实例(调用者创建被调用这实例),Spring框架里,不再被调用者创建,而是交给Spring创建。 (控制反转)
Spring 在创建这些实例时,会自动将调用者需要的对象实例注入给调用者,(调用者的依赖Spring自动注入,也就是自动注入被调用者的实例)。调用者通过Spring获取到了被调用者的实例。(依赖注入) - Setter方法 , 构造方法 , 注解注入
@Resource @Autowired
- @Resource : 默认按name注入,装配顺序:
1.如果type和name都指定了,那么从上下文中找到唯一匹配的Bean 进行装配,找不到抛出异常
2.如果制定了name,那么从上下文中查找名称(id)匹配的Bean进行装配,找不到则抛出异常
3.如果指定了type,则从上下文中找到类型唯一匹配的Bean进行装配,找不到或找到多个,抛出异常。
4.如果既没有指定name,也没有指定type,那么自动按name的方式装配,如果没有匹配,那么回退一个原始类型进行匹配,如果匹配则自动装配。
- @Autowired 按Type自动装配
- @Resource @Autowired 的相同和区别
两者都可以用来装配Bean,可以写作字段上或者Setter方法上
Autowired 是Spring注解,默认按Type装配,默认情况下要求依赖对象必须存在,如果允许null,那么需要设置required=false。如果需要使用名称装配 ,配合@Qualifier一起使用
Resouce是J2EE注解,默认按名称装配
依赖的解析过程