我正在使用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关于检测问题的想法。
答案 0 :(得分:1)
除非您进行集成测试,否则您不需要其他上下文。
在哪里使用emailagent?只需在那里正常注射它。和邮件服务一样。
您可以使用组件或服务对其进行注释,两者都是合适的。