Spring AOP面向切面编程及两种动态代理
来源:互联网 发布:数据归一化公式 编辑:程序博客网 时间:2024/05/01 21:07
面向切面编程:就是在原直线编程的某处咔嚓一下,加点动西,而且不影响原来的代码。可以用在日志,加权限,事物,异常管理等方面。
代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。
代理模式的关键点:代理对象与目标对象。
动态代理:
1)代理对象,不需要实现接口;
2)代理对象的生成,是利用JDKAPI, 动态的在内存中构建代理对象(需要我们指定创建 代理对象/目标对象 实现的接口的类型;);
3) 动态代理, JDK代理, 接口代理;
一.JDK中生成代理对象的API:
|-- Proxy
static Object newProxyInstance(
ClassLoader loader, 指定当前目标对象使用类加载器
Class<?>[] interfaces, 目标对象实现的接口的类型
InvocationHandler h 事件处理器
)
动态代理总结:
代理对象不需要实现接口,但是目标对象一定要实现接口;否则不能用动态代理!Cglib代理:
Cglib代理,也叫做子类代理。在内存中构建一个子类对象从而实现对目标对象功能的扩展。
l JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的类,就可以使用CGLIB实现。
l CGLIB是一个强大的高性能的代码生成包,它可以在运行期扩展Java类与实现Java接口。它广泛的被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception(拦截)。
l CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。
Cglib子类代理:
1)需要引入cglib – jar文件,但是spring的核心包中已经包括了cglib功能,所以直接引入spring-core-3.2.5.jar即可。
2)引入功能包后,就可以在内存中动态构建子类
3)代理的类不能为final, 否则报错。
4) 目标对象的方法如果为final/static,那么就不会被拦截,即不会执行目标对象额外的业务方法。
在Spring的AOP编程中,
如果加入容器的目标对象有实现接口,用JDK代理;
如果目标对象没有实现接口,用Cglib代理;
Spring AOP编程中的重要术语:
Aop,
aspect objectprogramming 面向切面编程
功能: 让关注点代码与业务代码分离!
关注点,
重复代码就叫做关注点;
切面,
关注点形成的类,就叫切面(类)!
面向切面编程,就是指对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。
切入点,
执行目标对象方法,动态植入切面代码。
可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。
- Spring AOP面向切面编程及两种动态代理
- 动态代理AOP(面向切面编程)
- Spring AOP---切面编程基础(动态代理)
- JAVA 动态代理与AOP编程(面向切面编程)
- Spring AOP实现:面向切面编程——动态代理原理
- AOP面向切面编程(二) 动态代理
- AOP面向切面编程的简单动态代理实现
- spring面向切面编程(aop)
- Spring AOP 面向切面编程
- Spring AOP 面向切面编程
- Spring面向切面编程AOP
- Spring AOP(面向切面编程)
- Spring AOP面向切面编程
- Spring 面向切面编程AOP
- Spring面向切面编程AOP
- Spring AOP面向切面编程
- Spring AOP面向切面编程
- spring aop面向切面编程
- SSH Secure Shell 无法登录:server responded "algorithm negotiation failed”
- SpingAOP源码研究
- adb的原理以及adb常用命令的介绍
- redhat7中Codeblocks编译c程序乱码问题 中文乱码解决方法
- 终于开始写博客
- Spring AOP面向切面编程及两种动态代理
- leetcode338.Counting Bits
- day06
- 飛飛(九)求m!
- Google API V3自定义图标或信息框
- Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法与解析
- MYSQL中运行sql文件出现 TYPE=MyISAM 错误的解决方法
- 奇异值的几何意义
- 1001 Problem B && 1008 Problem I