Spring -- 基于XML的AOP通知配置
2015-07-30 16:06
656 查看
上一篇博客,我们学习了基于注解配置AOP。
下面我们基于XML来配置AOP。
看代码
第一个切入方法,我们其中有后置返回通知、环绕通知两个方法。
第二个切入方法。
核心的东西来了
这里我们用XML配置代理了注解
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/28/89e78e67e5117be193df0c9df85cb678)
执行测试方法
输出结果
前置通知 … ,method=add, args = [1, 3]
验证方法 com.gp.spring.aop.impl.ValidateAspect
executeing …
@AfterReturning … ,method=add, args = [1, 3], return = 4
返回通知 … ,method=add, args = [1, 3]
后置通知 … ,method=add, args = [1, 3]
4
下面我们基于XML来配置AOP。
看代码
public interface Calculation { public int add(int x, int y); public int sub(int x, int y); public int mul(int x, int y); public int dev(int x, int y); }
public class CalculationImpl implements Calculation { @Override public int add(int x, int y) { int result = x + y; System.out.println("executeing ..."); return result; } @Override public int sub(int x, int y) { int result = x - y; return result; } @Override public int mul(int x, int y) { int result = x * y; return result; } @Override public int dev(int x, int y) { int result = x / y; System.out.println("executeing ..."); return result; } }
public class CalculationAspect { public void afterReturnMethod(JoinPoint joinPoint, Object ret) { String name = joinPoint.getSignature().getName(); List<Object> list = Arrays.asList(joinPoint.getArgs()); System.out.println("@AfterReturning ... ,method=" + name + ", args = " + list + ", return = " + ret); } public Object aroundMethod(ProceedingJoinPoint pjd) { String name = pjd.getSignature().getName(); List<Object> list = Arrays.asList(pjd.getArgs()); Object obj = null; System.out.println("前置通知 ... ,method=" + name + ", args = " + list); try { obj = pjd.proceed(); System.out.println("返回通知 ... ,method=" + name + ", args = " + list); } catch (Throwable e) { System.out.println("异常通知 ... , exception = " + e); e.printStackTrace(); } System.out.println("后置通知 ... ,method=" + name + ", args = " + list); return obj; } }
第一个切入方法,我们其中有后置返回通知、环绕通知两个方法。
public class ValidateAspect { public void validate(){ System.out.println("验证方法 com.gp.spring.aop.impl.ValidateAspect"); } }
第二个切入方法。
public class ValidateAspect { public void validate(){ System.out.println("验证方法 com.gp.spring.aop.impl.ValidateAspect"); } }
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.1.xsd"> <bean id="calculationImpl" class="com.gp.spring.aop.impl.xml.CalculationImpl"></bean> <bean id="calculationAspect" class="com.gp.spring.aop.impl.xml.CalculationAspect"></bean> <bean id="validateAspect" class="com.gp.spring.aop.impl.xml.ValidateAspect"></bean> <aop:config> <aop:pointcut expression="execution(public int com.gp.spring.aop.impl.xml.Calculation.*(int, int))" id="pointcut" /> <aop:aspect ref="calculationAspect" order="1"> <aop:after-returning method="afterReturnMethod" pointcut-ref="pointcut" returning="ret" /> <aop:around method="aroundMethod" pointcut-ref="pointcut" /> </aop:aspect> <aop:aspect ref="validateAspect" order="2"> <aop:before method="validate" pointcut-ref="pointcut" /> </aop:aspect> </aop:config> </beans>
核心的东西来了
这里我们用XML配置代理了注解
执行测试方法
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-xml.xml"); Calculation calculation = (Calculation)context.getBean("calculationImpl"); int result = calculation.add(1, 3); System.out.println(result); }
输出结果
前置通知 … ,method=add, args = [1, 3]
验证方法 com.gp.spring.aop.impl.ValidateAspect
executeing …
@AfterReturning … ,method=add, args = [1, 3], return = 4
返回通知 … ,method=add, args = [1, 3]
后置通知 … ,method=add, args = [1, 3]
4
相关文章推荐
- spring事务声明的几种传播特性
- Spring中使用到的设计模式 - 策略模式
- Java输出日历
- java的循环引用
- java基本类型的内存中占用字节数
- Java基础——其他类对象,IO流
- Spring学习笔记--依赖注入
- spring的事务中程序控制事务成功失败(Transaction marked as rollback)
- Spring Boot 使用
- java string equal出现的问题
- Java HashMap的死循环
- java string 中文转换UTF-8
- Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案
- Eclipse/MyEclipse自动补全的设置(自动提示)
- Java编程思想第四章练习7,使用break/return在打印到99时退出
- 关于 64位系统 java连接access 报错java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
- Java:应用Observer接口实践Observer模式
- 计数排序——JAVA实现
- Java编程思想第四章练习6答案
- Java 正则表达式详解