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应用程序中的这个词
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应用程序中的这个词