springaop原理

SpringAOP实现(原理)

只谈情不闲聊 提交于 2020-02-28 18:18:31
AOP原理: AOP分为:JDK动态代理和CGLIB代理 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 注意: 目标代理类不能是final 字段、方法、类 动态代理:在程序运行时,运用反射机制动态创建而成。 JDK动态代理实现:必须有接口和实现类 ?疑问:为什么必须是接口和实现类,既然核心是反射,普通的java也是可以通过反射实现注入,为什么必须是接口及实现类 UserService : package com.gillion.aop; /** * * @Description 目标接口 * @author huyuangui@aliyun.com * @time 2015年1月9日 下午2:28:00 * @version 1.0.0 */ public interface UserService { /** * 根据ID删除用户 * @param id * @return */ public String deleteUser(String id); } UserService实现类 : package com.gillion.aop.impl; import com.gillion.aop.UserService; /** * @Description UserService实现类 * @author

SpringAOP实现底层原理及详细介绍代码实现

拈花ヽ惹草 提交于 2020-01-14 07:26:18
SpringAOP原理介绍 在学习了SpringIOC之后,我们可以使用IOC的知识讲代码中层与层之间的耦合性进行解耦,便于后期维护,但是在实际生产环境,我们发现随着公司的业务增长,我们会升级某个业务层的业务方法的代码逻辑,升级后的业务方法还需要兼容以前的逻辑处理代码,也就是说再保留原有功能逻辑的基础上,在方法中新增新的逻辑代码,而这个时候,就需要我们去修改当前功能发放的源码,增加新的逻辑代码,然后重新运行项目,这时候会出现下面两个问题: ① 假如我们有当前功能方法的源码,就需要阅读当前方法的源码,然后在增加增加的新的逻辑代码,并且修改好后,需要将新的类文件去替换旧的类文件,而且阅读代码本身的效率就非常低。 ② 假如我们没有源码文件,那么就无法直接修改源码增加新的功能逻辑。 用SpringAOP方法就能解决(SpringAOP只是个人感觉相对性好用的一种方法) 在不修改原有功能逻辑的基础上完成扩展功能 我们举个例子说明一下吧: A对象中有一个testA的方法,A–>testA(),现在需要升级testA方法,创建一个B对象,在B对象中声明一个testB方法,然后在testB中调用testA方法,并且在testB中声明扩展代码。然后将代码中调用A对象的testA方法的代码替换为调用B对象的testB方法,完成了升级,为了方便代码的替换可以让A和B都实现借口C