gpt4 book ai didi

java - 动态创建对象的依赖注入(inject)的好处

转载 作者:行者123 更新时间:2023-12-02 02:49:31 24 4
gpt4 key购买 nike

在 Spring 等 IoC 容器的上下文中,我正在寻找一种将一些依赖项/属性注入(inject)到类实例化中的方法。并非对象的所有属性都可以使用依赖项注入(inject)来设置,并且对象是动态创建的以响应应用程序事件。如果所有依赖项都可以通过容器注入(inject),那么 Spring 托管 bean 将是理想的选择。

例如,下面定义的类必须注释为 @Component (或更专业的注释),组件扫描和依赖项注入(inject)才能工作。但它有几个属性(nameattempts),只能由应用程序代码而不是容器动态设置。但是,如果我必须使用 endpointrestTemplate (它们已由 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);

关于java - 动态创建对象的依赖注入(inject)的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com