控制反转 IoC
何为控制反转?我们先来说所谓的'正转',一般情况我们的业务需要多个类来完成,然后我们会在一个类中创建出这个类需要用到的对象以及一些外部资源。然而控制反转就是将这个控制权交出去,交给容器来负责。由容器来创建对象和其他资源,然后注入给对象。
依赖注入 DI
依赖注入的作用就是告诉容器我要什么资源,容器知道之后会创建对应的资源交到我们手上。
Spring框架有两种注入方式:注解注入、XML注入
- 注解注入
@Autowired
容器发现这个注解后会根据类型自动查找匹配的bean进行注入,如果同类型存在多个bean,那么会根据变量名来进行注入。
@Required
RequiredAnnotationBeanPostProcessor 为该注解的处理器,即bean后置处理器,检查所有带有该解的bean属性是否设置,如果未设置则抛出异常。
@Qualifier
当创建了多个具有相同类型的bean时,这时候使用Autowired注入时会产生混乱,这时候就可以通过Qualifier注解进行表明,不过前提时这多个相同类型bean具有不同的名字。
- XML注入
属性注入
<bean id='people1' class='com.demo.people'>
<property name="name" value="小白"/> <!--变量名注入 此处不介绍其他方式-->
<property name="age" value="24" />
</bean>
构造器注入
<bean id="people2" class="com.demo.people" > <!-- 要存在有name age参数的构造器才能产生bean-->
<constructor-arg name="name" value="小白"/>
<constructor-arg name="age" value="24"/>
</bean>
静态工厂注入
package com.demo;
public class PeopleFactory{
public static getPeople(String name,Integer age){
return new People(name,age);
}
}
<bean id="people3" class="com.demo.PeopleFactory" factory-method="getPeople">
<constructor-arg name="name" value="小白"/>
<constructor-arg name="age" value="24"/>
</bean>
实例工厂注入
package com.demo;
public class PeopleFactory{
public getPeople(String name,Integer age){
return new People(name,age);
}
}
<bean id='peopleFactory' class="com.demo.PeopleFactory"/>
<bean id="people4" factory-bean="peopleFactory" factory-method="getPeople">
<constructor-arg name="name" value="小白"/>
<constructor-arg name="age" value="24"/>
</bean>