我应该如何在Spring 4.2 ApplicationEventPublisher中使用xml构造函数arg使用autowire?

时间:2015-05-24 01:10:01

标签: spring events

我看到有很多实现,但是如何在不使用autowire和使用xml配置的情况下使用默认实现?

1 个答案:

答案 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" />