Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回单例Springbean的静态方法_Java_Spring_Spring Boot_Static_Autowired - Fatal编程技术网

Java 返回单例Springbean的静态方法

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;

正在尝试在spring boot中构建任务执行器应用程序。其思想是设计一个模板来检索默认TaskConfig,以便executor可以直接执行它

@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是一种创建任务配置的替代方法。因此,我试图避免依赖项注入,寻找一种替代方法来实现与静态方法调用相同的效果。我只是在寻找一种解决方案,其中我可以在模板本身中调用静态方法