How can I connect to Spring 4.2 ApplicationEventPublisher without using autwire using xml arg constructor?
There are several options, you can use annotations, implement and interface, or explicitly declare a dependency in xml or java config.
To get ApplicationEventPublisher
, you can implement ApplicationEventPublisherAware
and implement a method, is ApplicationContext
aware of this interface, and will call the setter to give you ApplicationEventPublisher
.
public SomeClass implementens ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher= applicationEventPublisher;
}
}
With annotation, you can just put @Autowired
in the field
public SomeClass implementens ApplicationEventPublisherAware {
@Autowired
private ApplicationEventPublisher publisher;
}
If this is a required dependency I would suggest using constructor injection, an added benefit (IMHO) is that you can create a field final
and that you cannot create an invalid instance.
public SomeClass implementens ApplicationEventPublisherAware {
private final ApplicationEventPublisher publisher;
@Autowired
public SomeClass(ApplicationEventPublisher applicationEventPublisher) {
this.publisher= applicationEventPublisher;
}
When using Java Config, you can simply create an annotated method @Bean
that takes an argument ApplicationEventPublisher
.
@Configuration
public class SomeConfiguration {
@Bean
public SomeClass someClass(ApplicationEventPublisher applicationEventPublisher) {
return new SomeClass(applicationEventPublisher);
}
}
For XML, you will need to autoincrement the constructor, you can specify it on a specific bean.
<bean id="someId" class="SomeClass" autowire="constructor" />
source to share