区别:
--------------------区别-------------
1: BeanFactory是容器的顶级父接口,定义了bean工厂的基础特性。
例如,根据名称去容器中获取bean的实例,BeanFacotry主要是用来管理Bean
的容器
2: FactoryBean
FactoryBean的本质其实就是一个bean。但是它不是普通的bean.
因为他生成的bean没有注入到spring容器中,所有它生成的bean
不能像@service或者@dao等注解标记的类,注入到任意的地方。
,实现这个接口时,spring容器在初始化时会把实现这个接口的bean
给取出来,然后使用getObject的方法来生成我们想要的bean
如果想要获取FactoryBean的实例,那么就需要在其前面加上&
就可以获取FactoryBean的实例。
public class User {
private String name;
private String sex;
public User() {
}
public User(String name, String sex) {
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
@Component
public class UserFactoryBean implements FactoryBean<User> {
//获取Bean的实例
@Override
public User getObject() throws Exception {
return new User();
}
@Override
public Class<?> getObjectType() {
return User.class;
}
}
public static void main(String[] args) {
// 将当前配置类标识的注解注入到容器中
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(Entrance.class);
// 获取指定的bean
WelcomeController welcomeController = (WelcomeController)
applicationContext.getBean("welcomeController");
welcomeController.handleRequest();
// 通过beanName获取的实例,是一个FactoryBean的实例 这个bean不受容器的管理
User user = (User)applicationContext.getBean("userFactoryBean");
System.out.println(userFactoryBean1);
// 通过&beanName获取的实例,获取的bean 这个bean是被容器管理的。
UserFactoryBean userFactoryBean = (UserFactoryBean) applicationContext.、
getBean(BeanFactory.FACTORY_BEAN_PREFIX + "userFactoryBean");
System.out.println("userFactoryBean===>" + userFactoryBean);
}
FactoryBean 返回的bean不受spring管理 需要手动的添加。
应用场景:
mapper的 暂时未验证