在分析springAop前,我们需要先了解下cglib代理这个知识点,之所以这么说是因为springAop的底层实现就是采用cglib动态代理这种方式,所以有必要在这里说一下,废话不多说,直接上例子
1.创建需要被代理的类,我们直接采用上一章的UserA类
public class UserA {
private String name;
private int age;
public UserA() {
System.out.println("====实例化userA");
}
public String getName() {
return "菜头";
}
public int getAge() {
return 18;
}
public void function(){
System.out.println("====userA");
}
}
2.利用cglib创建代理对象
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(UserA.class);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("===before"+o.getClass()+":"+method.getName());
methodProxy.invokeSuper(o,objects);
System.out.println("===after"+o.getClass()+":"+method.getName());
return null;
}
});
UserA o = (UserA)enhancer.create();
o.function();
}
这里直接模仿springAop里的@before和@after
3.结果
有木有,跟我们前面采用aop一模一样
ok,下章我们就aop源码进行深入讲解