Spring 笔记3 JDK动态代理 和 @Configuration

常规代理分类:

1、静态代理:

    特点:就是类文件可以在项目中看到,自己创建的之类的。

    主要形式:继承型 和 聚合性(推荐)

    缺点: 就是有点像封装,每次要创建新的类文件,复杂了的业务变化容易形成非常多类文件。

2、动态代理:

特点:没有类文件,就是直接是 byte[] 字节 到 jvm 中 。

主要例子:JDK 动态代理, cglib 代理

举例:Mybatis 有通过JDK 动态代理把一个接口获得一个对象出来。


@Configuration

Appconfig.Class 中可以不加@Configuration,加了是为了让Config 里面的 自己写的@Bean 不是原型,是成为单例。同时 Config 里是cglib 代理。


JDK 动态代理的三个参数


Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h)

1、Class Loader : 主要用来动态加载一个类。(某个类一开始被没有在项目当中,可以在磁盘上,此时需要Loader);

2、Class<?>[] : 得到一个返回对象;

3、InvocationHandler的实现类:  代理方法,做些增强的内容,都在这个InvocationHandler 中。(在InvocationHandler 实现类中,主要是第二个参数Method对象。这个参数相当于通过反射机制,获得了方法对象。通过这个Method.getReturn() 可以获得方法返回的类型)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。