为什么在注释配置时,Springs @Required不起作用

时间:2013-11-20 07:55:04

标签: spring spring-annotations required

我想知道在通过注释进行配置时是否有办法让@Required正常工作。我上下颠倒了我的配置,但似乎没有什么对我有用。我正在使用Spring 3.1 我的基本配置如下所示:

@Configuration
public class SpringConfig {
    @Bean
    public MailSender mailSender() {
        MailSender MailSender = new MailSender();
        // mailSender.setBean(dlMailSender);
        return mailSender;
    }

    @Bean
    public MyBean myBean() {
        MyBean myBean = new MyBean();
        // setting som props
        return myBean;
    }
} 

MailSender在这里:

@Configurable
public class MailSender {
    private MyBean myBean;
    @Required
    public void setMyBean(MyBean myBean) {
        this.myBean = myBean;
    }
}

我正在用这个junit测试它:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringConfig.class }, loader = AnnotationConfigContextLoader.class)
public class MailSenderTest {
    @Test
    public void test_main_beans_exists() {
        // when  then  given
    }
}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

简短回答 - 这在理论上是不可能的

使用基于XML的bean时,bean定义及其依赖项完全由应用程序上下文管理。 Spring能够检查,正在设置什么以及未设置什么。

使用基于注释的配置时,您自己设置依赖项。在从工厂方法返回之前,Spring无法知道你在使用bean做了什么。


如果要检查bean是否已正确初始化,请使用InitializingBean@PostConstruct并实施自检方法。 Spring经常在自己的bean中做这件事。