春季自动装配

时间:2012-10-10 11:42:18

标签: spring

我正在使用Spring,我没有使用JSF,使用ajax等。

我有服务

@Service(value="mailService")
public class MailService{
//an autowired dao, etc here
}

我有一个bean,我希望这个bean有一个MailService。

//Here i have tried so far individually @Service, @Component, @Controller
public class EmailAgent{

private MailService mailService;



    public MailService getMailService() {
        return mailService;
    }

    @Autowired
    public void setMailService(MailService mailService) {
        this.mailService = mailService;
    }

}

我在applicationContext.xml下面有

<context:component-scan base-package="mypack.containing.emailagent.path.too" />
<context:annotation-config/>
调用一个EmailAgent方法时,EmailAgent中的mailService为null。

我请求一些建议,我想了解为什么我在服务器启动期间没有得到任何异常,例如“我无法自动装配mailService”。前一段时间我正在使用JSF,我可以在服务器启动时看到这样的警告。

问题是指定的,如何解决

我用EmailAgent ea=new EmailAgent();生成ea 这是我的愚蠢,但是, 当我尝试获得一个上下文时:

ClassPathXmlApplicationContext cont=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
                  mailService=()cont.getBean("mailService");

我面临的问题是非唯一缓存等,有关生成一个更多上下文的问题。 那么我怎样才能“获得”上下文,防止再“生成”?

解决

我添加了

<bean class="email.EmailService" id="emailService"> 
  <dwr:remote javascript="emailService"> 
    <dwr:include method="sendMail"/>
    <dwr:include method="readAllMails"/>
    <dwr:include method="removeMailsById"/> 
  </dwr:remote> 
</bean> 

到dwr.xml并从emailService中删除关于dwr的注释。

正如我所见,dwr s和spring的注释真的相互冲突。

感谢@NimChimpsky关于检测问题的想法。

1 个答案:

答案 0 :(得分:1)

除非您进行集成测试,否则您不需要其他上下文。

在哪里使用emailagent?只需在那里正常注射它。和邮件服务一样。

您可以使用组件或服务对其进行注释,两者都是合适的。