动态创建对象的依赖注入的好处
在Spring这样的IoC容器的上下文中,我正在寻找一种方法将一些依赖关系/属性注入到类的实例化中。 并非所有对象的属性都可以使用依赖注入来设置,并且对象是响应应用程序事件而动态创建的。 如果所有依赖可以通过容器注入,那么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的好处。 或者我可以吗?
你可以使用工厂。 如下所示:
public class SomeClass {
private RestTemplate restTemplate;
private String endpoint;
private String name;
private int attempts;
public SomeClass(String name, int attempts, RestTemplate restTemplate,
String endpoint) {
this.name = name;
this.attempts = attempts;
this.restTemplate = restTemplate;
this.endpoint = endpoint;
}
}
@Component
public class SomeClassFactory {
@Autowired
private RestTemplate restTemplate;
@Autowired
private String endpoint;
public SomeClass create(String name, int attempts) {
return new SomeClass(name, attempts, restTemplate, endpoint);
}
}
SomeClass instance = someClassFactory.create("beep", 0);
如果我没有误解你,你需要在构造函数中设置值。
您可以从上下文创建bean并设置值:
context.getBean(“beanname”,arg1,arg2 ....);
链接地址: http://www.djcxy.com/p/14395.html上一篇: Benefit of dependency injection for dynamically created objects