如何在spring中使用java config设置bean

时间:2016-07-19 05:29:06

标签: java spring spring-mvc

我在spring xml文件中有以下详细信息。现在我想将它转换为spring java config bean。

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="test" />
        <property name="port" value="111" />
        <property name="username" value="test@gmail.com" />
        <property name="password" value="test123" />
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
            </props>
        </property>
    </bean>
    <bean id="utilityObject" class="com.ezone.utility.TestUtility">
        <property name="mailSender" ref="mailSender" />
    </bean>

转换mailSender这个bean如下所示。但是如何在java配置spring bean中转换utilityObject。我是新手。

@Bean(name="mailSender",autowire=Autowire.BY_NAME)
    public JavaMailSenderImpl mailConfiguration(){
        JavaMailSenderImpl mail = new JavaMailSenderImpl();
        mail.setHost("test");
        mail.setPort(111);
        mail.setUsername("test@gmail.com");
        mail.setPassword("test123");

        Properties javaMailProperties = new Properties();
        javaMailProperties.put("mail.smtp.auth", "true");
        javaMailProperties.put("mail.smtp.starttls.enable", "true");

        javaMailProperties.setProperty("mail.smtp.auth", "true");
        javaMailProperties.setProperty("mail.smtp.starttls.enable", "true");

        mail.setJavaMailProperties(javaMailProperties);
        return mail;
    }

如何定义以下bean:

<bean id="utilityObject" class="com.ezone.utility.TestUtility">
    <property name="mailSender" ref="mailSender" />
</bean>

上面的bean引用了mailSender

3 个答案:

答案 0 :(得分:1)

您可以在@Bean方法上放置一个参数,该方法将被注入:

@Bean
public TestUtility utilityObject(JavaMailSender mailConfiguration) {
    return new TestUtility(mailConfiguration);
}

或从@Bean中的一个@Configuration方法致电另一个; Spring将代理它们并确保应用单例行为:

@Bean
public TestUtility utilityObject() {
    return new TestUtility(mailConfiguration());
}

我认为第一个不太神奇,但任何一种方法都应该有用。

答案 1 :(得分:0)

@configuration用于JavaMailSenderImpl

参考:http://www.tutorialspoint.com/spring/spring_java_based_configuration.htm

编辑

@Bean
public TestUtility getUtilityObject() {
    return new TestUtility(mailConfiguration());
}

答案 2 :(得分:0)

可以从其他方法调用使用@Bean注释的方法。 Spring为@Configuration类创建代理,而单例只创建一次。

@Bean
public TestUtility utilityObject() {
    TestUtility uo = new TestUtility();
    uo.setMailSender(mailConfiguration());
    return uo;
}

查看详情http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-java-further-information-java-config