Java动态代理
1. 概念
代理类在程序运行过程中创建代理的方式称为动态代理,它其实是一种方便运行时期动态处理代理方法的调用机制。
当我们需要对目标对象中的某个方法的功能进行增强时,可采用动态代理的方式。这样既可以实现功能增强,又可以实现调用者与实现者之间的解耦。
2. 类型
动态代理主要有JDK动态代理与CGLIB动态代理两种方式。
1)JDK的动态代理只能用于目标对象的类实现了某个接口;而CGLIB动态代理既可以为实现了接口的类做代理,也可以为没有实现接口的类做代理;
2)在Spring中,如果目标对象实现了接口,优先采用JDK动态代理,如果没有实现接口只能使用CGLIB动态代理。
下一章节,将利用JDK动态代理,做一个简单的入门案例,帮助理解。
3. 入门案例
需求:现有艺人需要进行才艺表演,现需对具体的表演进行功能增强。
1)定义一个接口(才艺表演接口),其中定义了两个方法,分别是唱歌(sing)与跳舞(dance):
public interface Talent {
String sing(String songName);
String dance(String danceName);
}
2)定义一个才艺接口的实现类(某艺人团队),进行方法的实现:
public class Star implements Talent {
@Override
public String sing(String songName) {
System.out.println("计划演唱曲目:光辉岁月");
return "计划内定结果:冠军";
}
@Override
public String dance(String danceName) {
System.out.println("计划表演舞蹈:霓裳羽衣舞");
return "计划内定结果:亚军";
}
}
3)创建才艺表演的类,如果直接执行方法,效果如下:
public static void main(String[] args) {
Star star = new Star();
System.out.println(star.sing(""));
System.out.println(star.danc