对于mvc应用,spring虽然提供了bean的多例,也就是加入
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
例如,我们需要实现控制层每访问一次service层都获取一个实例,而不是同一个实例。但实际上,在启动服务后,使用@Autowire只注入了一个实例,
解决办法如下
1.使用多例模式代理(推荐)
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
2.使用ObjectFactory(手动)
熟悉ioc的对ObjectFactory都不陌生,它通过泛型,可以直接获取该种类型的bean
@Autowire
ObjectFactory<T> factory
//使用
factory.getObject()
3.使用传统ioc(不推荐,虽然和第二种相似,但感觉这样,自动注入失去了意义,强迫症勿用)
@Autowired
private BeanFactory beanFactory;
Object object = beanFactory.getBean(Object.class);