什么是AOP
AOP是OOP的扩展,在OOP中,有许多与核心业务无关的代码如日志代码分布在项目的各个层次中,产生大量的重复代码,并且不利于模块的重用,因此,AOP提供了一种称为切面的技术,剖开对象的内部,将那些影响了多个类的共同行为封装成一个可重用的模块,称为Aspect,也就是切面。这样做的好处就是减少了重复的代码,降低模块之间的耦合。
在AOP中,最重要的就是AOP代理类的实现,使用了代理模式(不明白代理模式的点这里,分为静态代理和动态代理;
静态代理是用AOP框架提供的命令进行编译,从而在编译阶段就可生成AOP代理类;
动态代理则是在运行时借助JDK动态代理,CGLIB等在内存中临时生成AOP动态代理类。
静态代理
假设我们要在杀人之前发出警告,刺杀成功后立刻向组织汇报,用代理模式实现这个过程,然后在代理类中调用杀手的方法前后实现相应的过程
1、定义一个Killer接口,包含刺杀方法
public interface Killer {
void kill();
}
2、定义杀手实现Killer接口
public class KillerImpl implements Killer{
@Override
public void kill() {
// TODO Auto-generated method stub
System.out.println("正在杀人,请勿打扰");
}
}
3、定义杀手的代理类,在杀人前和杀人后都发出信息
public class Proxy implements Killer{
private Killer killer;
public Proxy(Killer killer) {
// TODO Auto-generated constructor stub
this.killer = killer;
}
@Override
public void kill() {
// TODO Auto-generated method stub
System.out.println("我准备杀人啦");
killer.kill();
System.out.println("完成任务,今晚吃鸡");
}
}
4、测试
public class Test {
public static void main(String[] args) {
KillerImpl killerImpl = new KillerImpl();
Proxy proxy = new Proxy(killerImpl);
proxy.kill();
}
}
5、输出结果: