Spring Bean 后置处理器
1. 介绍¶
在之前的案例中,所有bean对象的创建都是通过反射得到对应的bean实例,其实在spring中还包含另外一种创建bean实例的方式,就是通过工厂模式进行对象的创建,在利用工厂模式创建bean实例的时候有两种方式,分别是静态工厂和实例工厂。
- 静态工厂:工厂本身不需要创建对象,但是可以通过静态方法调用,
对象=工厂类.静态工厂方法名()
- 实例工厂:工厂本身需要创建对象,工厂类 工厂对象=new 工厂类;
工厂对象.get对象名()
2. 示例¶
ioc4.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--<bean id="person" class="com.cmz.bean.Person" scope="prototype">--> <!--根据属性值设置的时候,name的名字取决于set方法后面的参数首字母小写的名称--> <!-- name: 表示参数列表的名称 value: 表示实际的具体指 type: 表示值的类型 index: 表示值的下标,从0开始 --> <!--利用工厂方法创建bean--> <!--静态工厂 类名.静态方法()--> <bean id="person" class="com.cmz.factory.PersonStaticFactory" factory-method="getInstance"> <constructor-arg value="张三"></constructor-arg> </bean> <!--实例工厂 先创建工厂实例,然后在调研工厂实例的方法--> <!-- factory-bean 表示具体工厂类的实例 factory-method 表示具体工厂实例的方法 --> <bean id="instanceFactory" class="com.cmz.factory.PersonInstanceFactory"></bean> <bean id="person2" class="com.cmz.bean.Person" factory-bean="instanceFactory" factory-method="getInstance"> <constructor-arg value="李四"></constructor-arg> </bean> </beans>
MyTest4.class
import com.cmz.bean.Person; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author summer * @create 2020-02-22 23:45 */ public class MyTest4 { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ioc4.xml"); Person person = context.getBean("person", Person.class); System.out.println(person); ApplicationContext context2 = new ClassPathXmlApplicationContext("ioc4.xml"); Person person2 = context.getBean("person2", Person.class); System.out.println(person2); } }
输出
Person{id=1, name='张三', age=11, gender='null', date=null} Person{id=2, name='李四', age=22, gender='null', date=null}