Java静态代理,jdk动态代理,cglib动态代理的区别
1.代理模式
给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。
代理模式角色分为 3 种:
抽象角色:一般是一个接口或者抽象类,定义了一些公共方法;
真实角色:真正实现业务逻辑的类,也是被代理的角色;
代理角色:用来代理和封装真实主题
真实角色和代理角色必须实现同一个抽象角色的接口。
2.静态代理
所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。
2.1 lol代练解释静态代理
以一个简单例子说明静态代理,S10赛季末,hyang用ad位上分困难,于是请求同学wliu帮助上分。hyang和wliu都实现了gamer接口的play方法。为了实现wliu代理hyang上分。在wliu类注入hyang对象,并对play方法进行增强。
public interface gamer {
void play();
package cn.hao.Thread.demo01;
public class hyangAndwliu {
public static void main(String[] args) {
hyang hy=new hyang();
wliu lw=new wliu(hy);
lw.play();
}
}
class hyang implements gamer{
@Override
public void play() {
System.out.println("烬");
}
}
class wliu implements gamer{
private gamer target;
public wliu(gamer target){
this.target=target;
}
@Override
public void play() {
before();
this.target.play();
after();
}
private void after() {
System.out.println("上黄金");
}
private void before() {
System.out.println("螳螂");
}
}
2.2 增删改查业务解释静态代理
首先定义一个业务类接口,实现简单的增删查改。该类有一个实现类。现在需求是在做出相关操作时输出日志,需要对实现类做方法增强。
public interface UserService {
void add();
void delete()