Java 返回单例Springbean的静态方法
正在尝试在spring boot中构建任务执行器应用程序。其思想是设计一个模板来检索默认TaskConfig,以便executor可以直接执行它Java 返回单例Springbean的静态方法,java,spring,spring-boot,static,autowired,Java,Spring,Spring Boot,Static,Autowired,正在尝试在spring boot中构建任务执行器应用程序。其思想是设计一个模板来检索默认TaskConfig,以便executor可以直接执行它 @Component public class TaskExecutor { private final TaskTemplate taskTemplate; @Autowired public TaskExecutor(TaskTemplate taskTemplate) { this.taskTemplate=taskTemplate;
@Component
public class TaskExecutor {
private final TaskTemplate taskTemplate;
@Autowired
public TaskExecutor(TaskTemplate taskTemplate) {
this.taskTemplate=taskTemplate;
}
public void runTask() {
final TaskConfiguration taskConfig = taskTemplate.getTaskConfig("taskName");
taskConfig.do();
}
}
@Component
public class TaskTemplate {
private final TaskParam1 taskParam1;
private final TaskParam2 taskParam2;
@Autowired
public TaskTemplate(TaskParam1 taskParam1, TaskParam2 taskParam2) {
this.taskParam1 = taskParam1;
this.taskParam2 = taskParam2;
}
public TaskConfiguration getTaskConfig() {
// Logic to build the task configuration from task template params
}
}
我看到的问题是TaskTemplate与TaskExecutor Autowired耦合,我希望将其删除。
我想用一个静态方便的方法来替换它,以返回singleton模板,这样我就可以用它执行getTaskConfig了
寻求改进建议
谢谢您可以将ApplicationContext注入到另一个bean中,如下面的代码所示。spring初始化后,可以使用BeanGetter.getTaskTemplate获取TaskTemplate单例bean ... 最终任务配置taskConfig=BeanGetter.getTaskTemplate.gettaskconfiggtaskname; ... @服务 公营面包机{ 私有静态应用上下文应用上下文; @自动连线 公共Beangetter应用程序上下文应用程序上下文{ this.applicationContext=applicationContext; } 公共静态任务模板getTaskTemplate{ 返回applicationContext.getBeanTaskTemplate.class; } }
现在还不清楚您遇到了什么问题。@Deadron我正试图避免TaskExecutor和TaskTemplate之间的耦合。我想摆脱构造函数注入,而是通过一些静态工厂方法来获取模板bean注入tasktemplate已经是松耦合的一个例子。注入和静态工厂方法在概念上都有相同的用途,从一种方法到另一种方法的交换没有实质性的区别。你应该告诉我们你的问题是什么,为什么你认为你需要改变它。看看这个,我觉得它需要一个tasktemplate来创建一个taskexecutor bean,这是不对的。TaskTemplate是一种创建任务配置的替代方法。因此,我试图避免依赖项注入,寻找一种替代方法来实现与静态方法调用相同的效果。我只是在寻找一种解决方案,其中我可以在模板本身中调用静态方法