今天在开发中发现了一个奇怪的问题,使用AOP切入一个方法后,该方法出现了空指针异常。
我们知道AOP是通过动态代理实现了,因为出现问题的这个类没有实现接口,使用的是cglib代理,而代码中直接获取该类对象的属性,debug发现是空的。
可以发现代理对象的属性全是空的,经过一顿操作发现 真实的target在
这样就比较显然了,cglib代理是通过继承的实现,是不会继承类属性的,所以直接通过代理对象获取属性是空的
解决方法如下:加入get set方法,获取的时候不用cglib对象直接拿属性,通过get方法才可以拿到真正target对象的属性。