【发布时间】:2017-10-18 22:25:32
【问题描述】:
在 IoC 容器(如 Spring)的上下文中,我正在寻找一种将一些依赖项/属性注入到类的实例化中的方法。并非对象的所有属性都可以使用依赖注入来设置,并且对象是动态创建的以响应应用程序事件。如果所有依赖项都可以通过容器注入,那么 Spring 托管 bean 将是理想的。
例如,下面定义的类必须注释为@Component(或更专业的注释),以便组件扫描和依赖注入工作。但它有几个属性(name 和attempts)只能由应用程序代码而不是容器动态设置。但是如果我必须使用 endpoint 和 restTemplate(它们已经由 IoC 容器管理),那么通过构造函数或 setter 方法将它们提供给这个对象并不方便。
public class SomeClass {
@Autowired
private RestTemplate restTemplate;
@Autowired
private String endpoint;
private String name;
private int attempts;
public SomeClass(String name, int attempts) {
this.name = name;
this.attempts = attempts;
}
// public getter and setter methods
}
由于有一些动态设置的属性,我不能使用new 关键字来实例化类并仍然获得 DI 和 IoC 的好处。或者我可以吗?
【问题讨论】:
-
您可以使用 AspectJ,但工厂通常是更好的选择。
标签: java spring dependency-injection