某类实现FactoryBean之后, 交给spring管理, 获取bean, 不是某类自己,可以是别的类
package com.qing.config;
import com.qing.bean.DogFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan({"com.qing.bean","com.qing.config"})
public class SpringConfig4 {
@Bean
public DogFactoryBean lovelyDog() {
return new DogFactoryBean();
}
}
因为DogFactoryBean实现了FactoryBean, getObject()方法返回的是Dog
package com.qing.bean;
import org.springframework.beans.factory.FactoryBean;
public class DogFactoryBean implements FactoryBean<Dog> {
@Override
public Dog getObject() throws Exception {
//可以做一系列的初始化工作
Dog dog = new Dog("可乐",3);
return dog;
}
@Override
public Class<?> getObjectType() {
return Dog.class;
}
//非单例模式
@Override
public boolean isSingleton() {
return false;
}
}
测试
package com.qing.app;
import com.qing.config.SpringConfig4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App4 {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig4.class);
String[] names = ctx.getBeanDefinitionNames();
for (String name: names) {
System.out.println("bean的名字:"+name);
}
System.out.println(ctx.getBean("lovelyDog"));
}
}
结果