将@Resource注入普通类

时间:2010-12-08 13:17:30

标签: java java-ee glassfish code-injection

我正在使用glassfish v3,我通过管理控制台创建了一个JavaMail会话。我想像这样使用Mail会话:

....
import javax.annotation.Resource;
import javax.mail.*;
import javax.mail.internet.*;

public class Mailer {

    MailGenerator mailGenerator;
    @Resource(name = "mail/WMCMail")
    private Session mailSession;

    public Mailer(MailGenerator mailGenerator) {
        this.mailGenerator = mailGenerator;
    }

    public void sendMixedMail(String recipient, String subject) {
        try {
            Message message = new MimeMessage(mailSession);

            message.setRecipients(
                Message.RecipientType.TO,
                InternetAddress.parse(recipient, false));
            message.setSubject(subject);

            ......

            Transport.send(message);

            logger.log(Level.INFO, "Mail sent to {0}.", recipient);
        } catch (MessagingException ex) {
            logger.log(Level.SEVERE, "Error in sending email to " + recipient, ex);
        } 
    }
}

当我调用sendMixedMail方法时,我看到mailSession为null。是不是可以将资源注入普通类?当我说正常时,我指的是一个不是托管bean或ejb-something的类。

1 个答案:

答案 0 :(得分:5)

不,你不能为普通班级做到这一点。引自SUN's J2EE injection page

  

请记住Java EE 5平台   容器可以处理注射   只有在使用它们时才会透明   在容器管理的组件上,例如   作为EJB bean,Servlets和JavaServer   Pages(JSP)技术标签处理程序。

     

这有两个原因。首先,为   性能考虑因素,a   容器可以限制其搜索   仅对组件进行注释   管理,在一个。中定义   部署描述符或是   可在特定的类路径中访问   位置。其次,容器必须   控制着创造   组件能够透明   执行注入   成分