Spring FactoryBean和BeanFactory
1、BeanFactory 是ioc容器的底层实现接口,是ApplicationContext 顶级接口
spring不建议我们直接操作 BeanFactory bean工厂,开发者人建议使用ApplicationContext,它继承多个接口,其中包括BeanFactory
在ioc容器接口中提供诸如刷新、加载、关闭等接口方法
FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext 是用来读取xml文件创建bean对象
ClassPathXmlApplicationContext : 读取类路径下xml 创建bean
FileSystemXmlApplicationContext : 读取文件系统下xml创建bean
AnnotationConfigApplicationContext 主要是注解开发获取ioc中的bean实例
2、FactoryBean 是spirng提供的工厂bean的一个接口,用于根据传入的泛型生成各种bean
FactoryBean 接口提供三个方法,用来创建对象,
FactoryBean 具体返回的对象是由getObject 方法决定的。
public interface FactoryBean<T> { String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType"; @Nullable T getObject() throws Exception; @Nullable Class<?> getObjectType(); default boolean isSingleton() { return true; } }
创建一个FactoryBean 用来生产User的bean对象
@Component public class FactoryBeanTest implements FactoryBean<User> { //创建的具体bean对象的类型 @Override public Class<?> getObjectType() { return User.class; } @Override public boolean isSingleton() { return true; } //工厂bean 具体创建具体对象是由此getObject()方法来返回的 @Override public User getObject() throws Exception { return new User(); } } @RunWith(SpringRunner.class) @SpringBootTest(classes = {FactoryBeanTest.class}) @WebAppConfiguration public class SpringBootDemoApplicationTests { @Autowired private ApplicationContext applicationContext; @Test public void tesst() { FactoryBeanTest bean1 = applicationContext.getBean(FactoryBeanTest.class); try { User object = bean1.getObject(); System.out.println(object==object); System.out.println(object); } catch (Exception e) { e.printStackTrace(); } } }