AOP 注解方式
来源:互联网 发布:psp合盘软件 编辑:程序博客网 时间:2024/05/17 23:58
1、导包
spring-aop:
aopalliance.jar
aspectjrt.jar
aspectjweaver.jar
spring-aop-3.2.5.RELEASE.jar
spring-core:
commons-logging-1.1.3.jar
spring-beans-3.2.5.RELEASE.jar
spring-context-3.2.5.RELEASE.jar
spring-core-3.2.5.RELEASE.jar
spring-expression-3.2.5.RELEASE.jar
2、配置bean.xml
<?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><context:component-scan base-package="diali"></context:component-scan><!-- bean.xml中引入aop名称空间 ,见上面名称空间 xmlns:aop--><!-- 开启AOP代理 注解--><aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>
3、创建Interface
public interface IUserDao {void save();}
4、创建持久层类(创建两个类,为了区分JDK代理、Cglib代理)
UserDao:
@Componentpublic class UserDao implements IUserDao {@Overridepublic void save() {// TODO Auto-generated method stubSystem.out.println("-------------------我是原始方法,不要改变我哈");}}
OrderDao:
@Componentpublic class OrderDao {public void save(){System.out.println("------------------我是OrderDao SAVE方法,CGLIB");}}
5、创建AOP
@Component//加入IOC容器@Aspect//指定当前类为切面类public class Aop { // 指定切入点表单式: 拦截哪些方法; 即为哪些类生成代理对象 @Pointcut("execution(* diali.*.*(..))") public void pointCut_(){ } // 前置通知 : 在执行目标方法之前执行 @Before("pointCut_()") public void begin(){ System.out.println("目标方法执行前"); } // 后置/最终通知:在执行目标方法之后执行 【无论是否出现异常最终都会执行】 @After("pointCut_()") public void after(){ System.out.println("目标方法执行后’"); } // 返回后通知: 在调用目标方法结束后执行 【出现异常不执行】 @AfterReturning("pointCut_()") public void afterReturning() { System.out.println("afterReturning()"); } // 异常通知: 当目标方法执行异常时候执行此关注点代码 @AfterThrowing("pointCut_()") public void afterThrowing(){ System.out.println("afterThrowing()"); } // 环绕通知:环绕目标方式执行(其实与前置通知、后置通知相同,使用其一即可) @Around("pointCut_()") public void around(ProceedingJoinPoint pjp) throws Throwable{ System.out.println("环绕前"); pjp.proceed(); System.out.println("环绕后"); }}
6、测试类
public void testAOP(){ ApplicationContext ac = new ClassPathXmlApplicationContext("diali/bean.xml"); IUserDao userDao = (IUserDao) ac.getBean("userDao"); userDao.save(); System.out.println(userDao.getClass()); System.out.println("\n-----\n"); OrderDao orderDao = (OrderDao) ac.getBean("orderDao"); orderDao.save(); System.out.println(orderDao.getClass()); }
打印结果:
环绕前
目标方法执行前
-------------------我是原始方法,不要改变我哈
环绕后
目标方法执行后’
afterReturning()
class com.sun.proxy.$Proxy11 ------------->JDK代理
-----
环绕前
目标方法执行前
------------------我是OrderDao SAVE方法,CGLIB
环绕后
目标方法执行后’
afterReturning()
class diali.OrderDao$$EnhancerByCGLIB$$a1d32121 --------------------> Cglib代理
阅读全文
0 0
- spring aop 注解方式
- AOP之注解方式
- aop-注解方式
- AOP 注解方式
- Spring aop之注解方式
- Spring AOP示例(注解方式)
- Spring 注解方式配置aop:
- 注解方式实现AOP编程
- Spring-注解方式实现AOP
- Spring AOP基础 注解方式
- 注解方式配置spring-aop
- 注解方式实现spring-aop
- spring 注解方式实现aop
- Spring 注解方式实现AOP
- 使用注解方式实现aop
- AspectJ注解方式实现AOP
- 使用Spring的注解方式实现AOP
- 使用Spring的注解方式实现AOP
- Vision_MATH_三分查找
- Openshift核心概念
- Java异常总结
- AS连接华为P10不显示自定义Log
- 十个程序员必备的网站推荐
- AOP 注解方式
- 程序员csdn报到
- 返回物体的自身坐标
- 菜鸟、京东几十亿打造的智能物流,双十一还会出现收货难么?
- ORB-SLAM2:QObject::~QObject: Timers cannot be stopped from another thread
- 数字签名算法DSA
- Python与机器学习之优化算法
- (三)配置bean之间的关系:继承、依赖
- .NET Remoting 最简单示例