Java 如何使用Spring在Helper类中获取自动连线bean

Java 如何使用Spring在Helper类中获取自动连线bean,java,spring,spring-mvc,spring-boot,dependency-injection,Java,Spring,Spring Mvc,Spring Boot,Dependency Injection,我想知道,既然不能在helper类中使用@Autowired,那么在helper类中获取bean的最佳方法是什么。 我现在要做的是在@Service/@Component/中自动连线。。。然后将构造函数中的bean传递给helper类。我不认为这是正确的做法,因为可能有太多的事情要通过 这样做的最佳方式是什么 public class SpringContextHolder implements ApplicationContextAware { public static Applic

我想知道,既然不能在helper类中使用@Autowired,那么在helper类中获取bean的最佳方法是什么。 我现在要做的是在@Service/@Component/中自动连线。。。然后将构造函数中的bean传递给helper类。我不认为这是正确的做法,因为可能有太多的事情要通过

这样做的最佳方式是什么

public class SpringContextHolder implements ApplicationContextAware {
    public static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextHolder.applicationContext = applicationContext;
    }
}
xml配置


现在,您可以使用静态上下文,如
SpringContextHolder.applicationContext.getBean(name)
您可以实现
applicationcontentaware
来获取应用程序上下文,然后将其放入(静态?)变量中

public class MyClass implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }
}
您可以将
applicationContext
设置为静态,并将应用程序上下文传递给它


然后使用
applicationContext.getBean(…)
我假设Helper类不是Spring管理的。这个类可以选择使用(需要AspectJ)

我假设helper类只是执行一些静态方法操作。助手类的基本示例是EmployeeUtil、ProductUtil等,如果您看到您的流程可以通过静态方法完成的话;然后跳过使用@Autowired和静态访问

@可配置是AOP加载时编织使用的标记;在这种情况下,可能是开销


如果您仍然看到内部需要@Autowired object,则通过容器注入将提供清晰的代码,而不是每次使用新关键字创建对象。

使用Prototype scope如何?@RobertVangor这是另一回事。也许这个问题就是您想要的示例:我在@Service中的一个方法中有太多的代码,我想从中创建一个新类(表示视频的类)。我是通过“new”操作符完成的,并在构造函数中传递该对象,但我还必须传递一个存储库,因为我无法在该类中自动连接。这样做不好吗?这个逻辑不能抽象到专用的服务bean中吗?是的,这是我一开始尝试的,但我需要使用私有变量和多个私有方法。这是应该在ServiceBean中完成的事情吗?假设您有我们正在讨论的ServiceA。使用say HelperA类所需的所有私有方法和其他bean。听起来HelperA依赖于ServiceA,而不是其他方式?如果不是这种情况,请发布一些代码,因为这很难跟踪OK,我理解。基本上,VideoUploadHelper类没有存在的理由,因为它需要VideoUploadService的所有依赖项,VideoUploadService本身以及模型。您可以直接在VideoUploadService中完成所有这些。但不是在私有方法上,而是在受保护的方法上,因此您可以测试它们。顺便问一下,这是控制器类吗?看起来是因为模型的缘故。另外,如果你的两个上传服务有相同的接口,我建议你@Autowired List并在它们上迭代,不知道impl如何上传视频。