使用注入的Spring依赖项创建新对象

时间:2015-12-07 05:58:29

标签: java spring dependency-injection

我想知道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接口能够做任何其他事情,但是有很多东西和东西。 :)

0 个答案:

没有答案