一、IOC/DI
IoC(Inversion of Control)控制反转
DI(dependency injection)依赖注入
IoC/DI指的是一个过程:对象的创建仅仅通过Spring容器负责,Spring容器可以通过对象的构造方法或工厂方法进行实例化对象。在创建对象过程中,如果对象需要依赖其他对象,也可以直接在Spring容器中注入到当前对象。
整个过程中对象本身在容器中控制自己的实例化(所以叫做控制反转),通过构造方法或setter方法把依赖对象注入到属性中(所以又叫做依赖注入)。
二、Bean创建的两种方式
1. BeanFactory
通过读取、解析配置文件中Bean的配置信息,容器通过反射使用构造方法实例化对象,默认使用无参构造。对象由容器进行管理
2. FactoryBean
2.1 静态工厂
例如:
people工厂类:
public class PeopleStaticFactory { private static People peo = new People(); public static People newInstance(){ return peo; } }
配置bean:
<bean id="peo3" class="com.bjsxt.factory.PeopleStaticFactory" factory-method="newInstance"/>
-
class:静态工厂类的全限定路径
-
factory-method:静态工厂中创建bean的静态方法。
由于静态方法可以直接通过类调用,所以不用创建工厂实例。
2.2 实例工厂
例如:
people工厂类:
public class PeopleFactory { People peo = new People(); public People getInstance(){ return peo; } }
配置bean:
实例工厂需要先创建工厂的实例才能调用方法。
<!-- 创建工厂实例 --> <bean id="factory" class="com.bjsxt.factory.PeopleFactory"></bean> <!-- factory-bean:工厂对象的id factory-method:创建当前bean的方法名称 --> <bean id="peo2" factory-bean="factory" factory-method="getInstance"></bean>
-
factory-bean:工厂bean的id属性值。
-
factory-method:工厂中创建bean的方法。
三、属性注入
1. 手动注入
手动注入又分为构造注入和设值注入两种方式
1.1 构造注入
构造注入是通过构造方法将属性注入,即在创建对象时就完成属性的注入。
使用构造注入要提供对应参数的构造方法。
需要注意的是,在声明了有参构造方法后,需要显式声明无参构造,否则无参构造方法将被覆盖。
配置bean:
<bean id="peo4" class="com.gsy.pojo.People"> <constructor-arg type="int" value="1"></constructor-arg> <constructor-arg type="java.lang.String" value="张三"></constructor-arg> </bean>
注入引用类型的属性要求该类型的对象已经被spring容器托管,即配置了对应的bean,ref指定对应bean的id即可。参数说明:
constructor-org:
name:参数名
index:参数索引
type:参数类型
以上三个参数不是都要指定,只要能确定参数即可。
ref:引用类型
value:参数值
1.2 设值注入
设值注入通过setter方法实现,所以要先有对象才能进行设值注入。
设值注入一般是配合无参构造一起使用,所有要同时具备无参构造和对应的setter方法。
配置bean:
<bean id="peo5" class="com.bjsxt.pojo.People"> <property name="id" value="2"></property> <property name="name" value="李四"></property> </bean>
参数说明:
name:属性名
value:属性值
ref:引用类型
ref用法同1.1 构造注入
2. 自动注入
标签:构造方法,People,对象,Spring,工厂,Framework,bean,注入 From: https://www.cnblogs.com/giaogiaoyang/p/17768221.html