BeanFactory和FactoryBean的区别
BeanFactory
是spring 顶层核心接口。是个Factory,也就是IOC容器或对象工厂,在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的,提供了实例化对象和拿对象的功能。
使用场景:
从Ioc容器中获取Bean(byName or byType)
检索Ioc容器中是否包含指定的Bean
判断Bean是否为单例
FactoryBean
是个Bean,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
facotryBean不是在spring上文加载的时候创建的, 在getBean的时候创建的
使用场景
ProxyFactoryBean
FactoryBean需要实现 FactoryBean接口
重写getObject() 、getObjectType() 方法
通过getBean( &beanName) 来获取bean 。最后得到的结果是getObject() 返回的实例。
@NoArgsConstructor
@EqualsAndHashCode
@Data
@ToString
public class User implements FactoryBean {
private int age;
private String name;
@Override
public Object getObject() throws Exception {
User user=new User();
user.setAge(21);
user.setName("张三");
return user;
}
@Override
public Class<?> getObjectType() {
return User.class;
}
}