给容器注册bean的几种方式:
1.包扫描:ComponentScan+bean注解(@Controller,@Service,@Repository,@Component,Bean):
2.条件注入:@Conditional按条件选择注入
3.@Import快速给容器中导入一个组件
4.FactoryBean注册
首先,定义我们自己的FactoryBean:
//FactoryBean工厂bean需要实现spring的FactoryBean接口,并制定对象的名称
public class CarFactory implements FactoryBean<Toyota> {
// 返回FactoryBean工厂bean产生的对象
@Override
public Toyota getObject() throws Exception {
return new Toyota();
}
// 返回FactoryBean工厂bean的对象类型
@Override
public Class<?> getObjectType() {
return Toyota.class;
}
// 返回FactoryBean工厂bean对象的scope,true:单例;false:多实例
@Override
public boolean isSingleton() {
return true;
}
}
然后将我们的FactoryBean添加到容器中:
@Configuration
public class FactoryBeanConfig {
/**
*
* FactoryBean(工厂Bean)<br/>
* 1)、默认获取到的是工厂bean调用getObject创建的对象 <br/>
* 2)、要获取工厂Bean本身,我们需要给id前面加一个& &colorFactoryBean
*/
@Bean
public CarFactory carFactory() {
return new CarFactory();
}
}
最后,就是我们使用的时候了,直接上样例demo:
@Test
public void testCarFactory() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(FactoryBeanConfig.class);
printBeans(context);
// 获取的是getObject()方法获取的对象
Object bean1 = context.getBean("carFactory");
Object bean2 = context.getBean("carFactory");
System.out.println("bean1的类型:" + bean1.getClass());
System.out.println(bean1 == bean2);
Object bean3 = context.getBean("&carFactory");
System.out.println("bean3的类型:" + bean3.getClass());
}
private void printBeans(ApplicationContext context) {
String[] defBeans = context.getBeanDefinitionNames();
for (String name : defBeans) {
System.out.println(name);
}
}
这个其实很简单,就这样吧。
本文深入探讨了在Spring框架中注册Bean的多种方式,包括包扫描、条件注入、@Import注解及通过FactoryBean进行注册。文章详细介绍了如何自定义FactoryBean,并将其配置到容器中,以及如何在应用中正确使用和获取这些Bean。
1135

被折叠的 条评论
为什么被折叠?



