Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
什么是AOP,AOP的作用和优势
aop就是面向切面编程,把程序的可复用代码进行抽取,在执行的过程中,通过动态代理技术,对当前的方法进行增 强。不用修改原有业务代码。可以减少重复代码,提高开发效率,维护方便。
什么是动态代理
动态代理的字节码随创建的时候进行使用,随用随加载,静态代理是代码已经写好的,代码创建好完成加载。
就是说,静态字节码是我们将特定的增加代码已经写好了。动态字节码是随着运行期间,针对于捕捉到的方法,进行
增加,编译期间,他也不知道要对谁进行增强。
动态代理常用的两种方式
基于接口的动态代理
jdk动态代理,要求被代理的类至少实现一个接口。
基于子类集成的动态代理
cglib动态代理,被代理类必须要可以被集成,不能是final类。
jdk动态代理如何实现
被代理类必须实现一个接口,首先调用Proxy的newProxyInstance方法,方法的参数有三个,被代理对象的类加载 器,被代理对象实现的接口和新建一个InvocationHandler。然后实现InvocationHandler中的invoke方法。 invoke 方法有三个参数。proxy代理对象的引用, method当前执行的方法, args执行方法所需的参数。在里面写好代理逻 辑后,通过method的invoke反射出去。
Cglib的Enhaner实现动态代理?
与jdk的不同, cglib的无需实现接口,要求被代理的对象不能是final的,主要用到Enhancer的create方法,第一个参 数是被代理对象的字节码,另一个参数callback就是我们要进行代理的增强功能。其中的callback要去实现里面的intercept方法。