在一个风和日立的下午,一个java程序员正在愉(tong)快(ku)的修改着bug,旁边的一个好基友突然问我AOP动态代理的区别。楞了一下,心想 " 卧槽,这特喵的就触及到我的知识盲区了"。尽管内心波涛汹涌,表面上还是故作镇定的答道:“我现在还有工作要忙,明天再告诉你”。好基友只能点点头说那好吧,下班回到家后赶紧麻溜的打开笔记本一顿谷歌加百度
如果不注意这些点,在实际开发过程中往往会出现一些奇怪的现象。我遇到的问的最多的一个问题就是为什么事务没生效? 感兴趣的可以参考我的另一篇文章:为啥我的@Transaction不生效?
/**
* 接口:TargetService
* 原生类:Target 指被代理的类
* 代理类:TargetProxy 指代码增强后产生的类
* 代理对象:targetService 指代理类所产生的对象
* 原生对象:target 指代理类内部引用的对象
*
* @author hcq
* @date 2020/3/25 20:57
*/
public class JdkProxy {
interface TargetService {
void save();
void select();
}
static class Target implements TargetService {
@Override
public void save() {
System.out.println("我要变强!!!");
}
@Override
public void select() {
System.out.println("我是咸鱼,我不增强");
}
}
static class TargetProxy implements TargetService{
private final Target target;
TargetProxy(Target target){
this.target = target;
}
@Override
public void save() {
System.out.println("已充值1000000元");
target.save();
System.out.println("小伙子你很强!");
}
@Override
public void select() {
target.select();
}
}
public static void main(String[] args) {
//new TargetProxy(new Target())对象的过程其实就相当于是spring注入代理对象的过程
TargetService targetService=new TargetProxy(new Target());
//增强后的方法
targetService.save();
//未进行增强的方法
targetService.select();
}
}
/**
* @author hcq
* @date 2020/3/25 23:19
*/
public class Cglib {
static class Target{
void save(){
System.out.println("我不充钱也要变强!!!");
}
void select(){
System.out.println("我继续咸鱼。。。。。");
}
}
static class TargetProxy extends Target{
private final Target target;
TargetProxy(Target target){
this.target = target;
}
@Override
void save(){
target.save();
System.out.println("日复一日,年复一年的辛苦刷经验,终于达到了完成了变强的愿望。\n");
}
@Override
void select(){
System.out.println("我继续咸鱼。。。。。");
}
}
public static void main(String[] args) {
//new TargetProxy(new Target())对象的过程相当于是spring注入CGLIB代理对象的过程
Target targetService=new TargetProxy(new Target());
//增强后的方法
targetService.save();
//未进行增强的方法
targetService.select();
}
}
觉得写的还行的话点个赞再走呗,你们的点赞与关注就是我创作的最大动力。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有