我有这样的原型豆类一个FactoryBean:如何在春季单控制器注入原型豆
@Component
public class ApplicationConfigurationMergedPropertiesFactoryBean implements SmartFactoryBean<Properties>{
@Autowired
protected ApplicationConfigurationInitializer initializer;
@Override
public Properties getObject() throws Exception {
return XXXXXXXXXX;
}
@Override
public Class<?> getObjectType() {
return Properties.class;
}
@Override
public boolean isSingleton() {
return false;
}
@Override
public boolean isPrototype() {
return true;
}
我想自动装配它的控制器和,每当我试图访问属性(通过p.get()
,具有ApplicationConfigurationMergedPropertiesFactoryBean.getObject()
一个新的原型实例:)
@Controller
@RequestMapping("/home")
public class HomeController {
@Autowired
@Qualifier("applicationConfig")
private Properties p;
@RequestMapping(method = { RequestMethod.GET, RequestMethod.POST })
public String home() {
System.out.println(p.get("something"));
}
但是这永远不会调用getObject(如果我的豆直接注入的ApplicationContext的访问,它的工作原理,提供了一个全新的属性豆:
@Controller
@RequestMapping("/home")
public class HomeController {
@Autowired
@Qualifier("applicationConfig")
private Properties p;
@Autowired
private ApplicationContext ac;
@RequestMapping(method = { RequestMethod.GET, RequestMethod.POST })
public String home() {
System.out.println(p.get("something")); //WRONG!!!!
System.out.println(ac.getBean("applicationConfig", Properties.class).getProperty("something")); //OK!!!!
如何直接使用@Autowired注入来实现?
你不能只是注入ApplicationConfigurationMergedPropertiesFactoryBean吗? – WeMakeSoftware
可能的重复:http://stackoverflow.com/questions/7621920/scopeprototype-bean-scope-not-creating-new-bean –