我有這樣的原型豆類一個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 –