Spring配置切面
来源:互联网 发布:风暴英雄数据查询 编辑:程序博客网 时间:2024/05/21 10:30
- 配置文件
- 切面实现类
- 切面表达式详解
- 测试代码
配置文件
- applicationContext.xml配置
<!-- 配置切面所需要的目标类型 --> <bean id="userDao" class="dao.impl.UserDaoImpl"/> <!-- 配置切面所需要的bean类 --> <bean id="comboAspect" class="aop.aspect.ComboAspect"/> <!-- 配置切面 --> <aop:config> <aop:pointcut id="pointCut" expression="execution(* modUser(..))" /> <aop:aspect id="comboAdvice" ref="comboAspect"> <aop:around pointcut-ref="pointCut" method="aroundIntercept"/> <aop:after-returning pointcut-ref="pointCut" method="afterIntercept" returning="result"/> <aop:before pointcut-ref="pointCut" method="beforeIntercept"/> </aop:aspect> </aop:config>
<aop:pointcut/>
配置切入点<aop:aspect/>
配置切面实现类- expression属性配置要执行切面的方法的表达式
切面实现类
package aop.aspect;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;/** * @author zhangxingrui 定义切面类(切面类中可以定义很多增强方法) * */public class ComboAspect { // 前置增强,第一个参数必须是连接点类型 public void beforeIntercept(JoinPoint jp) { System.out.println("=========前置增强----beforeIntercept==========="); Object[] params = jp.getArgs();// 获取调用的目标方法的参数(参数数组) String methodName = jp.getSignature().getName();// 方法的签名(方法名、参数列表、返回类型) Object target = jp.getTarget();// 返回调用的目标对象 Object target02 = jp.getThis();// 返回调用的目标对象 System.out.println("目标对象target:" + target); System.out.println("目标对象this:" + target02); System.out.println("目标方法methodName:" + methodName); System.out.println("方法参数params:" + params); } // 环绕增强 public Object aroundIntercept(ProceedingJoinPoint pjp) throws Throwable { System.out.println("=========环绕增强----aroundInterceptBefore==========="); Object[] params = pjp.getArgs(); String methodName = pjp.getSignature().getName(); Object target = pjp.getTarget(); Object target02 = pjp.getThis(); System.out.println("目标对象target:" + target); System.out.println("目标对象this:" + target02); System.out.println("目标方法methodName:" + methodName); System.out.println("方法参数params:" + params); Object result = pjp.proceed(params); // 调用目标Bean中的方法 System.out.println("=========aroundInterceptAfter==========="); return 2; // 该方法的返回值就是应用层获取到的值 } // 后置增强,如果是异常增强处理方法则第二个参数可以定义为:Exception exception public void afterIntercept(JoinPoint jp, Object result) { System.out.println("=========后置增强----afterIntercept==========="); Object[] params = jp.getArgs(); String methodName = jp.getSignature().getName(); Object target = jp.getTarget(); Object target02 = jp.getThis(); System.out.println("目标对象target:" + target); System.out.println("目标对象this:" + target02); System.out.println("目标方法methodName:" + methodName); System.out.println("方法参数params:" + params); System.out.println("目标方法返回结果:" + result); }}
切面表达式详解
- modUser(..) :表示匹配所有方法名称为modUser的方法
- mod*(..) :表示匹配所有方法名以mod开头的方法
- mod*(String,..) :表示匹配所有方法名以mod开头且第一个参数为String类型的方法
- mod*(String,*) :表示匹配所有方法名以mod开头、有两个参数且第一个参数为String类型的方法
- com.scxh.dao.impl..mod(..):表示匹配com.scxh.dao.impl包下所有类中以mod开头的方法
- com.scxh.dao...mod*(..):表示匹配com.scxh.dao包下所有类中以mod开头的方法
- com.scxh.dao..UserDaoImpl.(..):表示匹配com.scxh.dao包下所有UserDaoImpl类中的所有方法
- com..dao..UserDaoImpl.mod*(..)):表示匹配com包下二级子包名为dao中的所有UserDaoImpl类中的所有以mod开头的方法
测试代码
- 要执行切面的方法
package dao.impl;public class UserDaoImpl{ public Integer addUser() { return 0; } public Integer delUser() { return 1; } public Integer modUser() { System.out.println("==========目标类(DAO实现类)中的方法被调用========="); return 1; } public Object getUser() { return null; }}
- 测试执行
package test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import dao.impl.UserDaoImpl;public class TestAop { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml"); UserDaoImpl userDaoImpl = (UserDaoImpl)context.getBean("userDao", UserDaoImpl.class); userDaoImpl.modUser(); }}
阅读全文
0 0
- spring切面配置
- Spring切面配置
- Spring配置切面事务
- Spring配置事务切面
- spring 切面配置
- spring切面(aspect)配置
- Spring 事务切面配置
- Spring配置切面
- Spring之配置切面aspect
- spring-aop配置多切面
- Spring AOP( 面向切面编程)配置
- Spring+Hibernate的事物切面配置
- 【Spring AOP】基于Schema配置切面
- 【Spring AOP】基于Schema配置切面
- spring添加AOP切面-基于XML配置
- Spring aop切面实际应用 XML配置
- Spring aop切面实际应用 XML配置
- Spring AOP 之 Schema配置切面
- 使用Caliburn.Micro创建简单的WPF程序
- 一步一步带你做WebApi迁移ASP.NET Core2.0
- Jenkins 持续集成自动化测试配置
- 二、storm任务提交原理
- T00003 Hanoi塔问题
- Spring配置切面
- JAVA之ArrayList
- 回顾大一·C语言编程3.4(2)
- POJ 2996.Help Me with the Game
- jsp动态嵌入另一个jsp页面
- Android将网页做成app-- Jsoup网络解析框架
- Yii2.0的ActionFilter类详细解读
- OPENSTACK NETWORKING 概念
- BOM(浏览器对象模型)和DOM(文档对象模型)