Java 8 and Spring 4 : 在接口中使用自动装配

Java 8 and Spring 4 : Use autowiring in interface

Java 8 添加了一个新功能,我们可以通过该功能在接口中提供方法实现。 Spring 4 中有没有什么方法可以在接口中注入bean,可以在方法体内使用? 下面是示例代码

public interface TestWiring{

@Autowired
public Service service;// this is not possible as it would be static.
//Is there any way I can inject any service bean which can be used inside testWiringMethod.
default void testWiringMethod(){
  // Call method of service
  service.testService();
 }
}

这有点棘手,但如果您需要接口内部的依赖项来满足任何要求,它就可以工作。

我们的想法是声明一个方法,该方法将强制已实现的 class 提供您想要自动装配的依赖项。

这种方法的缺点是,如果您想提供太多依赖项,代码将不会很漂亮,因为每个依赖项都需要一个 getter。

public interface TestWiring {

   public Service getService();

   default void testWiringMethod(){
       getService().testService();
   }

}


public class TestClass implements TestWiring {

    @Autowire private Service service;

    @Override
    public Service getService() {
        return service;
    }

}

您可以创建 Class 应用程序上下文的实用程序并在任何地方使用它,即使不是 bean class。

你可以有这样的代码:

public class ApplicationContextUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext context) {
        ApplicationContextUtil.applicationContext = context;
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

}

并将其添加到您的 spring 配置中

<bean class="com.example.ApplicationContextUtil" id="applicationContextUtil"/>

现在在您需要时易于使用:

ApplicationContextUtil.getApplicationContext().getBean(SampleBean.class)

网络和简单spring应用程序中的这个词