我目前在使用 JSF 2 和 AOP 与 AspectJ 注释的组合时遇到问题。我不知道 Spring AOP 是否在这里发挥作用......(我不太了解 SPRING AOP、ASPECTJ、GOOGLE GUICE 之间的区别......这是另一个问题)
在我通过单击 jsf 视图中的表单在我的数据库中添加了一些值之后,我正在尝试发送一封电子邮件。我有一个由 JSF 处理的 managedBean AddPartipant(链接到视图)以通过表单添加参与者。我想拦截在数据库中进行更改的方法并在此操作之后发送电子邮件。我有一个带有发送电子邮件方法的 Spring bean SendMailBoImpl。(发送工作正常)
我发现使用 AOP 是一个好方法。它仅在我尝试使其在主程序中运行时才有效……而不是在完整的 web 应用程序中。我读了一些关于问题上下文 spring / Jsf 的东西,但没有找到解决方案......但是......
我知道我通过视图在数据库中添加数据的方法是可以的......但是在修改数据库时永远不会发送邮件。
有人有想法吗?
非常感谢 :)
AddParticipant ManagedBean :
public class AddParticipant implements Serializable{
//DI via Spring
ParticipantBo participantBo;
private String id_study ;
private Participant aParticipant = new Participant();
//getters and setters
public void addParticipant(){
aParticipant.setId_study (id_study);
...
participantBo.save(aParticipant);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajout du participant "+id_study+" dans l'étude "+ study_name));
}
麦博服务:
@After("execution(* com.clb.genomic.lyon.beans.AddParticipant.addParticipant(..))")
public void sendMail() {
....
mailSender.send(message);
....
}
我的豆配置:
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean id="addParticipant" class="com.clb.genomic.lyon.beans.AddParticipant"/>
<bean id="sendMailBo" class="com.clb.genomic.lyon.bo.SendMailBoImpl">
<property name="mailSender" ref="mailSender" />
<property name="simpleMailMessage" ref="customeMailMessage" />
</bean>
当我这样做时,它正在工作:
ApplicationContext appContext = new ClassPathXmlApplicationContext
( "classpath:webConfiguration/applicationContext.xml");
AddParticipant aspect = (AddParticipant) appContext.getBean("addParticipant");
aspect.addParticipant();