Spring框架 AOP
来源:互联网 发布:域名出售 meiju 美剧 编辑:程序博客网 时间:2024/06/06 09:03
AOP(面向切面编程)是一种新的方法论,是对传统OOP(面向对象编程)的补充
AOP编程时,扔然需要定义公共功能,但可以明确的定义这个功能在哪里,以什么方式应用,并且不必修改受影响的类,这样一来横切关注点就被模块化到特殊的对象(切面)里(aspect)
Aop的好处
每个事物逻辑位于一个位置,代码不分散,便于维护和升级
业务模块更简洁,只包含核心业务代码
导入AOP jar包 如图所示
横切关注点
使用动态代理解决问题
代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象
任何对原始对象的调用都要通过代理,代理对象决定是否以及何时将方法调用转到原始对象上
切面:带有@Aspect注解的java类
通知:是标注有以下5中注解的简单的java方法
例:
/**
* 当目标方法执行之前调用的切面方法
* @param point
*/
@Before("execution(public double com.jredu.aop.service.*.*(double,double))")
public void beforelog(JoinPoint point) {
//方法名字
String methodName=point.getSignature().getName();
//参数列表
double a=(double)point.getArgs()[0];
double b=(double)point.getArgs()[1];
System.out.println("before----方法:"+methodName+"的参数a:"+a+",b:"+b);
}
/**
* 当方法执行完毕,还没有返回结果时执行的切面方法
* @param point
*/
@After("execution(public double com.jredu.aop.service.*.*(double,double))")
public void afterlog(JoinPoint point) {
String methodName=point.getSignature().getName();
System.out.println("after----方法:"+methodName);
}
/**
* 当方法执行完毕并返回结果之后的切面方法
*/
@AfterReturning(pointcut="execution (* com.jredu.aop.service.*.*(..))",returning="obj")
public void afterReturning(JoinPoint point,Object obj) {
//方法名称
String method=point.getSignature().getName();
System.out.println("after return -----method:"+method+",return:"+obj);
}
/**
* 当目标方法执行抛出异常时会执行的切面方法
* @param point
* @param ex
*/
@AfterThrowing(pointcut="execution (* com.jredu.aop.service.*.*(..))",throwing="ex")
public void afterThrowing(JoinPoint point,Exception ex) {
String method=point.getSignature().getName();
System.out.println("after throw---,method="+method+",ex="+ex.getLocalizedMessage());
}
/**
* 当目标方法执行前和执行后会执行该方法
* @param point
* @throws Throwable
*/
@Around("execution (* com.jredu.aop.service.*.*(..))")
public double around(ProceedingJoinPoint point) throws Throwable {
//执行目标方法前
String method=point.getSignature().getName();
System.out.println("before method:"+method);
System.out.println("before2 method:"+method);
double d=(double) point.proceed();
//执行目标方法后,返回结果前
System.out.println("返回值是"+d);
//调用proceed方法,可以分割前后
System.out.println("after method:"+method);
return d;
}
最典型的切入点表达式是根据方法的签名来匹配各种活动:
示例如下:
指定切面的优先级
可以通过实现Ordered接口或利用@Order注解指定
实现Ordered接口,getOrder()方法的返回值越小,优先级越高可以为负数
例:
当使用XML声明切面时,需要在<bean>根元素中导入aop Schema
阅读全文
0 0
- Spring AOP框架
- Spring AOP框架
- Spring AOP框架
- Spring AOP框架
- Spring AOP框架
- Spring AOP框架
- Spring框架:AOP详解
- Spring AOP框架使用
- 【spring框架】AOP介绍
- Spring框架中的aop
- spring框架_06 AOP
- spring框架--AOP
- Spring AOP框架
- spring框架之AOP
- Spring框架AOP
- Spring框架 AOP(三)
- Spring 框架AOP
- Spring框架-AOP细节
- opencv2.4.9学习:加载、修改、保存一个图片
- 三分钟集成连连支付方法(以认证支付为例)
- hbuilder新手刚下载谷歌、IE浏览器无法链接
- sqoop使用与原理
- Win10系统下在国内访问Tensorflow官网
- Spring框架 AOP
- 自己总结的java相关面试题
- Neon内部函数
- 统计学绪论
- (4)Python笔记:模拟登入CSDN(requests库实现)
- console.log对IE的影响
- check the manual that corresponds to your MySQL server version for the right syntax to use near‘XXX’
- java开发
- Excecutor框架