在Spring中通过配置创建组件

时间:2018-06-28 16:44:08

标签: java spring

我对Spring框架有一点经验,并且了解了核心功能。但是,如何在运行时从配置动态创建一个或多个bean?还是不应该在这里完全不使用依赖项注入,而只是正常地注入依赖项?

让我们用一个例子来说明这一点。以下类表示我的应用程序中某些类或功能的配置。

@Entity
@Table(name = "some_config)
public class SomeConfig {

    @Id
    @GeneratedValue
    @Column(name = "some_config_id")
    private long id;

    // more properties and accessors 

}

现在,我想使用SomeConfigService从数据库中加载所有当前配置。效果很好,但是我现在应该怎么做才能用配置初始化下面的类?

public class SomeFeature implements Runnable {

    private SomeConfig config;
    private SomeOtherService service;

    public SomeFeature(SomeConfig config) {
        this.config = config;
    }

    @Override
    public void run() {
        // this code here depends on some values in my config
    }
}

现在,我们有了一个构造函数参数,Spring不能动态注入它。

到目前为止我尝试过的事情

尽管我现在可以做些什么,但我使用以下选项之一:

@Component
@Scope("prototype")
public class SomeFeature implements Runnable {

    private SomeConfig config;
    private SomeOtherService service;

    public SomeFeature(SomeConfig config) {
        this.config = config;
    }

    @Override
    public void run() {
        // this code here depends on some values in my config
    }

    @Autowired
    public void setSomeOtherService(SomeOtherService service) {
        this.service = service;
    }
}

我在这里尝试过使用AutowireCapableBeanFactory。首先构造对象,然后尝试使用setter注入解决所有其他依赖项。

public class SomeFeature implements Runnable {

    private SomeConfig config;
    private SomeOtherService service;

    public SomeFeature(SomeConfig config, SomeOtherService service) {
        this.config = config;
        this.service = service;
    }

    @Override
    public void run() {
        this code here depends on some values in my config
    }
}

或者我可以尝试从该对象中完全删除依赖项注入,然后将构造委托给另一个对象。也许在这里使用为我构造这些对象的工厂bean的权利?

我正在寻找什么?

我如何实例化要素类,以便解决其依赖关系,并且是否在这里进行依赖关系注入是正确的选择。

0 个答案:

没有答案