我看到有很多实现,但是如何在不使用autowire和使用xml配置的情况下使用默认实现?
答案 0 :(得分:4)
有几个选项,您可以使用注释,实现和接口,或者在xml或java config中显式声明依赖项。
要获得ApplicationEventPublisher
您可以实施ApplicationEventPublisherAware
并实施该方法,ApplicationContext
会知道此界面,并会调用setter为您提供ApplicationEventPublisher
。
public SomeClass implementens ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher= applicationEventPublisher;
}
}
使用注释,您可以将@Autowired
放在字段
public SomeClass implementens ApplicationEventPublisherAware {
@Autowired
private ApplicationEventPublisher publisher;
}
如果它是必需的依赖项我会建议使用构造函数注入,添加的好处(IMHO)是你可以创建字段final
并且你不能构造一个无效的实例。
public SomeClass implementens ApplicationEventPublisherAware {
private final ApplicationEventPublisher publisher;
@Autowired
public SomeClass(ApplicationEventPublisher applicationEventPublisher) {
this.publisher= applicationEventPublisher;
}
使用Java Config时,您只需创建一个@Bean
带注释的方法,该方法将ApplicationEventPublisher
作为参数。
@Configuration
public class SomeConfiguration {
@Bean
public SomeClass someClass(ApplicationEventPublisher applicationEventPublisher) {
return new SomeClass(applicationEventPublisher);
}
}
对于XML,您需要自动装配构造函数,您可以在特定的bean元素上指定它。
<bean id="someId" class="SomeClass" autowire="constructor" />