- 浏览: 202893 次
- 性别:
- 来自: 广州
最新评论
-
lxyoucan:
特地注册账号来感谢
在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置 -
jinjiaoliu:
...
ant使用scp上传文件问题 -
AspirantHui:
非常感谢,你提供的方法解决了我的问题!
在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置 -
cxh61207:
...
ant使用scp上传文件问题 -
daoyuanjiao:
如果用的是福昕PDF阅读器,该怎么弄呢?
在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置
Spring AOP是面向切面的方式,大部分项目使用它都是在事物的处理方面,有关具体的AOP的概念这里就不介绍了,今天我主要通过一个简单的例子让大家来了解AOP的相关应用
1.首先看下我项目中service的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd "> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory" /> <!-- the transactional advice (what 'happens'; see the <aop:advisor/> bean below) --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- the transactional semantics... --> <tx:attributes> <!-- methods starting with 'save', 'update' or 'remove' use the default transaction settings --> <tx:method name="opt*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BusinessException"/> <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BusinessException"/> <tx:method name="create*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BusinessException"/> <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BusinessException"/> <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BusinessException"/> <tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BusinessException"/> <!-- other methods are set to read only <tx:method name="*" read-only="true"/> --> </tx:attributes> </tx:advice> <!-- ensure that the above transactional advice runs for any execution of an operation defined by the FooService interface --> <aop:config> <aop:advisor pointcut="@within(com.berheley.aop.Dbaop)" advice-ref="txAdvice" /> <aop:advisor pointcut="execution(* com.berheley.oa.project.business.service.impl..*(..))" advice-ref="txAdvice" /> <aop:advisor pointcut="execution(* com.berheley.oa.project.desktop.module.DtModuleBO.*(..))" advice-ref="txAdvice" /> <aop:advisor pointcut="execution(* com.berheley.oa.project.desktop.layout.DtLayoutBO.*(..))" advice-ref="txAdvice" /> <aop:advisor pointcut="execution(* com.berheley.oa.project.desktop.SetLayOutBo.*(..))" advice-ref="txAdvice" /> <aop:advisor pointcut="execution(* com.berheley.oa.project.remind.RemindBO.*(..))" advice-ref="txAdvice" /> </aop:config> <!-- 此句使aspectj可用,必需加入 --> <aop:aspectj-autoproxy/> <!-- 此句声明Aspect类,Spring会根据里面的定义对相关类作AOP处理 --> <bean id="JBPMAspectJ" class="com.berheley.jbpm.plugin.JBPMAspectJ" /> <bean id="ProcessEventListener" class="com.berheley.oa.listener.air.ProcessEventListener" /> <!-- 业务类 --> <bean id="commonService" class="com.berheley.oa.project.business.service.impl.CommonBO"> <property name="dao"> <ref bean="commonDao"/> </property> <property name="scheduler" ref="schedulerFactory" /> </bean> </beans>
从这个配置文件中,可以看出事物也用到了AOP;如果要要某个方法进行拦截或者监听,就必须加入:<aop:aspectj-autoproxy/> ,然后再下面在配置做AOP处理的类,类似: <bean id="JBPMAspectJ" class="com.berheley.jbpm.plugin.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; @Aspect public 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 { // 通过实例获得流程的代办人和流程的id List<Map<String, Object>> list = workflowBo.getAcorIdByTaskInstance(taskInstance); if (list.size() > 0) { if (list.get(0).get("userName") != null && !"".equals(list.get(0).get("userName"))) { // 打开流程代办的url String url = "/workflow/service/doTask.ao?type=message&method=goTask&defaltPage=0&taskInstanceId=" + list.get(0).get("taskId"); // 当前流程的代办人的username String 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); // 把取出的流程消息还原成json MessageSocketClient ms = new MessageSocketClient(); ms.sendMessage(processMessage); } } } } }
通过这段代码,应该可以让大家初步的掌握AOP的使用
发表评论
-
Java之RMI设计模式基本原理与示例
2013-01-23 14:45 11351. Name RMI是Romote Method Invo ... -
Java常用的通信协议效率比较(转)
2013-01-23 14:38 1599本文比较了RMI,Hessian, ... -
JQuery工具插件qTip
2011-12-14 17:38 1288好吧,原谅我偷懒:http://messense.me/jqu ... -
JAVA解压缩文件——包含嵌套的压缩文件
2011-09-15 09:19 3115今天主要介绍JAVA处理ZIP文件,JAVA提供了相应的类、方 ... -
JAVA:附加码生成器(图片)
2011-08-29 11:30 1502〔Picture.java〕 package creato ... -
面试题--求质数
2011-04-29 13:04 1232求100以内的质数(指在一个大于1的自然数中,除了1和此整数自 ... -
Workspace in use or cannot be created, choose a different one.--错误解决办法
2010-11-25 13:16 1647eclipse 使用一段时间后,有时会因为一些故障自己就莫名 ... -
Java定时任务Timer
2010-11-19 11:12 1415Java定时任务,用到的地方可能比较多,例如:定时对数据库的某 ... -
Tomcat 启动时加载方法
2010-11-11 15:54 1591最近遇见一个需求,需要在项目中加入一个Mina通讯的客户端,而 ... -
AOP几个重要的概念
2010-11-09 16:45 1803《Spring参考手册》中定义了以下几个AOP的重要概念: ... -
结果集转换成json字符串
2010-08-25 11:20 3184在项目中做查询时一般使用:sql或者hql,今天分别介绍一下怎 ... -
java还原科学计数法的数值
2010-08-06 15:26 2063java.text.DecimalFormat nf = ne ... -
java.lang.IllegalArgumentException: No bean specified
2010-08-04 17:04 3013java.lang.IllegalArgumentExcept ... -
argument type mismatch问题解决
2010-07-01 09:31 6581type Exception report messag ... -
实现sybase数据库字段自增
2010-04-23 13:44 1127例如:在sybase中有一张用户表t_ug_user,其中包含 ... -
Hibernate框架ORM的原理
2010-04-21 14:48 1228hibernate,通过对jdbc进行封装,对 java类和 ... -
net.sourceforge.jtds.jdbc.ClobImpl 问题
2010-02-08 14:45 2938小弟最近在做数据查询时,遇到一个这样的问题: 数据列 ... -
父子页面之间值传递问题
2009-12-31 17:26 1579第一:页面中包含iframe ... -
Oracle函数和mysql函数比较
2009-12-31 17:23 21821. Oracle中的to_number()转换成 ... -
fusioncharts生成图表flash遮挡页面中元素的情况
2009-12-31 15:57 2225在做web开发中遇到fusionc ...
相关推荐
在本篇【Spring AOP+ehCache简单缓存系统解决方案】中,我们将探讨如何利用Spring AOP(面向切面编程)和ehCache框架来构建一个高效、简单的缓存系统,以提升应用程序的性能。ehCache是一款流行的开源Java缓存库,它...
本文将深入探讨如何在Unity中实现AOP,并基于"MyAOP(AOP拓展实现小例子).zip"的项目进行解析。 首先,我们需要理解Unity中的AOP基础。Unity本身并不内置对AOP的支持,但我们可以通过引入第三方库或自定义解决方案来...
总结起来,Spring Boot结合AOP和事件监听机制,可以有效地实现操作日志的记录,同时保持代码的清晰和模块化。这不仅有助于调试和问题定位,也能提高系统的可维护性。通过扩展和定制这些组件,我们可以根据项目需求...
13. **观察者模式(Observer)**:Spring AOP并没有直接实现观察者模式,但在Spring事件模型中,`ApplicationEventPublisher`和`ApplicationListener`接口体现了观察者模式,允许对象注册监听并响应特定事件。...
- `spring-context.jar`:扩展了`spring-core`和`spring-beans`,提供了一个上下文环境,支持国际化、事件监听、任务调度、邮件服务等功能。 - `spring-aop.jar`:包含了Spring的AOP支持,允许你在不修改源代码的...
虽然这部分没有直接涉及到缓存,但这种枚举在实现AOP(面向切面编程)时非常有用,例如,我们可以创建一个切面来拦截带有`OperationLog`注解的方法,并根据`OperateType`的值执行相应的日志记录逻辑。 在Spring ...
此外,它还支持消息源、AOP代理、事件监听等特性。 3. **spring-aop-3.0.xsd**:Spring的AOP(面向切面编程)模块提供了在不修改代码的情况下添加额外行为的能力。这个XSD文件定义了如`<aop:config>`、`<aop:...
SSH2,全称为Struts2、Spring和Hibernate的第二代集成框架,是Java Web开发中的...通过这个简单的实例,你可以学习到如何利用SSH2搭建一个基础的Java Web应用,并逐步深入理解每个组件的作用和它们之间的协同工作方式。
`spring-context-3.0.xsd` 文件包含了在上下文环境中配置的各种元素,如消息源、事件监听器、AOP 配置、bean 的工厂方法等。这个文件对于实现高度自定义的 Spring 应用程序非常重要。 4. **spring-mvc-3.1.xsd**: ...
总结来说,"Redis_Spring_AOP完善.zip"项目是一个学习和实践的好例子,它展示了如何利用SpringBoot的便利性,通过AOP实现数据的Redis缓存,提高系统的响应速度和并发处理能力。通过深入理解并实践这些技术,开发者...
【标题】"CXF Spring Hello简单实例"是一个关于使用Apache CXF与Spring框架结合实现一个基本的RESTful服务的教程。Apache CXF是一个开源服务框架,它允许开发人员创建和消费各种Web服务,包括SOAP和RESTful风格。...
例如,通过Spring的AOP(面向切面编程)可以自动处理任务的生命周期,而Hibernate则可以用于存储流程实例和历史数据。 总结一下,Osworkflow2.8 工作流是一个强大而灵活的工具,它简化了业务流程的管理,让开发者...
在这个简单的SSH整合实例中,我们将使用数据库SQL Server作为数据存储,而开发工具选择的是NetBeans。 首先,Spring框架是核心的依赖注入(DI)和面向切面编程(AOP)容器,它提供了管理应用对象和处理事务的能力。...
综上所述,这个例子展示了如何在Java中使用反射创建动态代理,利用监听器响应用户交互,以及使用拦截器增强方法调用。通过这些技术,开发者可以更加灵活地控制程序行为,增加功能,同时保持代码的清晰和解耦。然而,...
在这个"基于SSH的AJAX简单实例"中,我们将探讨如何将SSH框架与AJAX结合,以实现更加动态和交互式的Web应用。 1. **SSH框架介绍**: - **Spring**:Spring是一个全面的Java企业级应用开发框架,提供了依赖注入、...
**基于Eclipse开发OSGI的简单实例** OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许在单个JVM上动态地部署、管理、发现和使用服务。Eclipse是一个广泛使用的开源集成开发环境(IDE),它...
**Spring 整合 ActiveMQ 简单实例** 在当今的分布式系统中,消息队列(Message Queue)作为异步处理、解耦组件的关键技术,被广泛应用。Spring 框架与 ActiveMQ 的整合,使得开发者能够轻松地在 Spring 应用程序中...
标题“jms+activeMq+spring学习简单例子”表明这个压缩包包含了一些示例代码,用于演示如何在Spring框架中集成JMS和ActiveMQ,以便于理解和学习。通过这个例子,开发者可以了解如何在实际应用中实现基于消息的通信。...
2. **配置web.xml**:设置DispatcherServlet,并添加SpringMVC的监听器ContextLoaderListener,以初始化Spring的IoC容器。 3. **配置spring-servlet.xml**:在SpringMVC配置文件中,我们需要定义HandlerMapping、...