【spring系列】之4:FactoryBean向容器中注册bean

本文深入探讨了在Spring框架中注册Bean的多种方式,包括包扫描、条件注入、@Import注解及通过FactoryBean进行注册。文章详细介绍了如何自定义FactoryBean,并将其配置到容器中,以及如何在应用中正确使用和获取这些Bean。

给容器注册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);
		}
	}

这个其实很简单,就这样吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值