我想知道Spring的最佳方法是将值注入到每次创建的bean中。我每次都会使用工厂来创建bean,但是生成的bean不是由spring管理的。这意味着像@Inject
这样的注释是没有意义的。
我可以看到两种方法(1)创建工厂并手动注入所需内容或(2)在创建对象后使用AutowireCapableBeanFactory
。
(1)
@Named
public class TrackableJobFactory {
public TrackableJob wrap(final Job runner) {
return new TrackableJob(runner, bus);
}
private MessageBus bus;
@Inject
public void setMessageBus(MessageBus bus) {
this.bus = bus;
}
}
// ---- other class ---
private final Job innerJob;
private final MessageBus bus;
public TrackableJob(Job job, MessageBus bus) {
//...
}
我不喜欢这种混合注射和非注射豆类的方式。维持也有点痛苦。
(2)您为工厂做了类似的事情,但是注释实际工作。这意味着您最终会在不受Spring控制的类中使用Spring注释。这对我来说很奇怪。 :(
// in factory
AutowireCapableBeanFactory acbf; // injected by voodoo
public TrackableJob wrap(final Job runner) {
TrackableJob j = new TrackableJob(runner);
acbf.autowireBean(j);
return j;
}
// ---- other class ---
private final Job innerJob;
@Inject
private MessageBus bus;
public TrackableJob(Job job) {
//...
}
是否有一部分Spring修复了这个问题?我没有看到Factory接口能够做任何其他事情,但是有很多东西和东西。 :)