我很感兴趣有没有办法用依赖已经创建的对象进行初始化?
假设我有以下课程:
class MyPage {
@Autowired LogStorage storage;
private String applicationId;
private Date date;
public MyPage(String applicationId, Date date) {
this.applicationId = applicationId;
this.date = date;
}
public String render() {
Collection<Entry> entries = storage.getEntries(applicationId, date);
// render entries into HTML for example
}
}
我想将对象创建分为两个阶段。首先,使用用户提供的数据创建对象(在此示例中为applicationId
和date
),第二个是使用Spring DI容器依赖项初始化对象。所以我需要某种初始化已经创建的对象。我认为客户端代码看起来像这样:
MyPage p = new MyPage(applicationId, date);
beanFactory.initDependencies(p);
String html = p.render();
客户端不知道(在我的情况下不应该)Page对象所需的所有依赖项,因此我无法显式提供依赖项。但是我引用了BeanFactory
对象,可以将此任务委托给Spring。有没有办法做到这一点?
答案 0 :(得分:3)
applicationContext.getAutowireCapableBeanFactory().autowireBean(p);
替代方法autowire和autowireBeanProperties
请记住,它只会设置bean属性,因此不会有拦截器,事务等AOP。