我对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的权利?
我如何实例化要素类,以便解决其依赖关系,并且是否在这里进行依赖关系注入是正确的选择。