gpt4 book ai didi

具有运行时初始化参数的 Spring bean

转载 作者:行者123 更新时间:2023-12-01 15:57:29 25 4
gpt4 key购买 nike

我有一个类需要

  1. 它使用的各种 bean 的依赖注入(inject)
  2. 用于初始化的运行时参数

该类看起来类似于此

public class Validator {

@Autowired
private ServiceA serviceA;

@Autowired
private ServiceB serviceB;

private String s;

private ClassA a;
private ClassB b;

public void initialize(String s, ClassA a, ClassB b) {
this.s = s;
this.a = a;
this.b = b;
}

public void performTaskA() {
//use serviceA, serviceB, s, a and b
}

public void performTaskB() {
//use serviceA, serviceB, s, a and b
}

public void performTaskC() {
//use serviceA, serviceB, s, a and b
}

}

我可以通过哪些选项将上述类定义为 spring bean(以利用依赖注入(inject))并确保调用者在调用任何 performTask*() 方法之前调用 initialize()?

注意 - 我知道 Object getBean(String name, Object... args) throws BeansException; 但它看起来不太好,因为我们会失去类型安全性。还有其他建议吗?

更新 -提到的解决方案here使用查找方法注入(inject)是一个不错的选择。在 Spring 实现之前,您对以下使用内部类的替代方案有何看法

public class MyService {
private ServiceA serviceA;
private ServiceB serviceB;

public class DataClass {
private Integer counter;

public DataClass(Integer counter) {
this.counter = counter;
}

public Integer performActionAndGetCount() {
serviceB.performAction();
return this.counter++;
}
}
}

//client module
MyService service = beanFactory.getBean("myService");
MyService.DataClass dataClass = service.new DataClass(1);

这种方法有什么缺点吗?

最佳答案

使用组件、服务或存储库注释来注释您的类。这将使您的类被视为 spring bean,然后您可以使用依赖注入(inject)和运行时初始化。

确保在您的 {dispatcher-servlet}.xml(将 {} 中的名称替换为您在 web.xml 中为调度程序 servlet 提供的名称} 文件中您已经编写了这一行

关于具有运行时初始化参数的 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10930961/

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