首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

AOP监听的容易例子

2012-09-21 
AOP监听的简单例子Spring AOP是面向切面的方式,大部分项目使用它都是在事物的处理方面,有关具体的AOP的概

AOP监听的简单例子

Spring AOP是面向切面的方式,大部分项目使用它都是在事物的处理方面,有关具体的AOP的概念这里就不介绍了,今天我主要通过一个简单的例子让大家来了解AOP的相关应用

?

1.首先看下我项目中service的配置文件

?

?从这个配置文件中,可以看出事物也用到了AOP;如果要要某个方法进行拦截或者监听,就必须加入:<aop:aspectj-autoproxy/> ,然后再下面在配置做AOP处理的类,类似: <bean id="JBPMAspectJ" />;

?

2.AOP处理类:

?

?

package com.berheley.oa.listener.air;import java.util.List;import java.util.Map;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.web.context.WebApplicationContext;import com.berheley.jbpm.model.CustomTaskInstance;import com.berheley.oa.common.ConstantDefine;import com.berheley.oa.project.business.service.def.workflow.IWorkFlowServiceBO;import com.berheley.oa.project.persistence.model.TUgUser;import com.berheley.util.ApplicationContextKeeper;@Aspectpublic class ProcessEventListener{@Before("execution(* com.berheley.oa.project.business.service.impl.workflow.WorkFlowServiceBO.optBusinessServiceBeforeWFTask*(..))")public void doLogBefore(){}@AfterReturning("execution(* com.berheley.oa.project.business.service.impl.workflow.WorkFlowServiceBO.getTaskInstanceInfo(..))")public void doLogAfter(JoinPoint jp) throws Exception{WebApplicationContext wac = (WebApplicationContext) ApplicationContextKeeper.getAppCtx();IWorkFlowServiceBO workflowBo = (IWorkFlowServiceBO) wac.getBean(ConstantDefine.WORKFLOW_SERVICE);Object[] args = jp.getArgs();// 获得方法的参数// 获得流程的实例CustomTaskInstance taskInstance = (CustomTaskInstance) args[0];// 判断流程是否结束,如果结束不做处理if (taskInstance.getProcessInstance().hasEnded()){} else{// 通过实例获得流程的代办人和流程的idList<Map<String, Object>> list = workflowBo.getAcorIdByTaskInstance(taskInstance);if (list.size() > 0){if (list.get(0).get("userName") != null&& !"".equals(list.get(0).get("userName"))){// 打开流程代办的urlString url = "/workflow/service/doTask.ao?type=message&method=goTask&defaltPage=0&taskInstanceId="+ list.get(0).get("taskId");// 当前流程的代办人的usernameString userName = list.get(0).get("userName").toString();TUgUser user = workflowBo.getUserByUsername(userName);// 取出当前代办人的所有代办流程信息String message = workflowBo.getTaskListReMindForMainPage("120",user);MessagePacking mp = new MessagePacking();String processMessage = mp.packingCurrentProcessMessage(message,list.get(0).get("taskId").toString(), user);// 把取出的流程消息还原成jsonMessageSocketClient ms = new MessageSocketClient();ms.sendMessage(processMessage);}}}}}

?通过这段代码,应该可以让大家初步的掌握AOP的使用

热点排行