弹簧容器内速度电子邮件组件的最佳方法

时间:2012-02-15 06:53:38

标签: spring velocity

在弹簧容器内使用速度分量的最佳方法是什么。

在我的velocity util(emailer)类中,我已经声明了将电子邮件发送为STATIC的方法,以避免每次都创建电子邮件对象。我也宣布将二传手注射为静态。

这是正确的方法吗?

爪哇:

     Class emailer{


    public static Boolean sendEmail(){
     SimpleMailMessage msg = new SimpleMailMessage();  
     String val = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, template, model);
    msg.setText(val);
    mailSender.send(msg);


    }



    private static MailSender mailSender;

@Autowired
public static void setMailSender(MailSender mailsender) {
    LOGGER.debug("MailSender set successfully");
    mailSender = mailsender;
}

private static VelocityEngine velocityEngine;

@Autowired
public static void setVelocityEngine(VelocityEngine velocityengine) {
    LOGGER.debug("Velocity Engine set successfully");
    velocityEngine = velocityengine;
}
    }

xml更改:         本地主机     

<bean id="emailHelper" class="emailer">
  <property name="mailSender" ref="mailSender"/>
  <property name="velocityEngine" ref="velocityEngine"/>

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
 <property name="velocityProperties">
 <props>
  <prop key="resource.loader">class</prop>
  <prop key="class.resource.loader.class">
            org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
  </prop>


  </props>
   </property>
   </bean>

1 个答案:

答案 0 :(得分:0)

这里不应该使用静态方法。 Spring无法自动装配静态方法(参见Can you use @Autowired with static fields?

但即使您可以自动装配静态方法,也不会比使用实例方法更好。这是因为Spring默认将bean创建为单例,这意味着它只创建一个实例,并且每个@Autowired属性使用相同的实例。因此,每次创建电子邮件对象或mailsender对象的新实例时,它将继续使用相同的实例。

Spring documentation更详细地解释了它。

您应该只使用实例属性和变量来使其工作 - 换句话说,只需从每个属性中删除单词static