【发布时间】:2016-01-02 05:19:59
【问题描述】:
我有一个用于原型 bean 的 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 并直接访问 bean,它就可以工作,提供一个全新的 Properties bean:
@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 吗?
标签: java spring spring-mvc dependency-injection