创建自定义工厂Bean,实现FactoryBean。
importorg.springframework.beans.factory.FactoryBean;publicclassPersonFactoryBeanimplementsFactoryBean<Person>{@OverridepublicPersongetObject()throwsException{System.out.println("getObject...");returnnewPerson();}@OverridepublicClass<?>getObjectType(){returnPerson.class;}@OverridepublicbooleanisSingleton(){returntrue;}}
配置类,将创建的工厂Bean注册到IOC容器。
importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassConfig{@BeanpublicPersonFactoryBeanpersonFactoryBean(){returnnewPersonFactoryBean();}}
Person类
publicclassPerson{}
测试类
@Testpublicvoidtest01(){//创建ioc容器AnnotationConfigApplicationContextcontext=newAnnotationConfigApplicationContext(Config.class);Objectbean1=context.getBean("personFactoryBean");Objectbean2=context.getBean("&personFactoryBean");PersonFactoryBeanpersonFactoryBean=context.getBean(PersonFactoryBean.class);System.out.println(bean1);System.out.println(bean2);System.out.println(personFactoryBean);//关闭容器context.close();}
输出结果:
getObject...com.example.demo.Person@4f18837acom.example.demo.PersonFactoryBean@359f7cdfcom.example.demo.PersonFactoryBean@359f7cdf
发现通过自定义工厂Bean的name来获取Bean,是通过getObject方法生成Bean的。