看到好多地方对比CGLIB和动态代理来实现AOP的, 感觉就是一边倒的. CGLIB什么都好, 比如:
- 目标对象可以是Interface或者Class,不像动态代理只支持Interface
- CGlib性能也好.
看到这些,我就有一个疑问, 既然如此优秀, 为什么动态代理还有存在的必要呢.带着这个疑问,我研究了一下CGLIB的不足.对比动态代理来实现AOP,CGLIB需要有2个前提条件,都是动态代理不存在的.
- final Class不支持, 因为CGLIB是生成子类来实现AOP,所以final Class自然无法支持了.
- 需要强制无参数构造函数
其实从JAVA实现AOP这个角度,大致有2个方法,
- 一个是通过设计模式:比如代理,装饰器,责任链之类. 这几种的前提就是前期设计比较好,也就是要设计要依赖于接口而不是实现. 比如我认为Struts2的拦截器也是AOP的一种.
- 一个就是生成子类:也就是Cglib所选择的这种方法,就会有上面所说说的2个限制.
相关推荐
java设计模式【之】Cglib动态代理【源码】【场景:帮爸爸买菜】 /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用...
动态代理允许我们为一个接口创建一个代理类,代理类可以是任何接口的实现。当我们调用代理类的方法时,它会调用预先定义好的拦截器,从而实现对目标对象方法的增强处理。 动态代理的主要作用是: - **增强功能**:...
MyBatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、Executor 这 4 种接口的插件,MyBatis 通过动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这 4 种接口...
数据脱敏是在保持数据真实性的前提下,对敏感信息进行部分或全部替换,以保护个人隐私和商业秘密。在Java中,可以使用正则表达式、字符串操作函数或自定义加密算法来实现。例如,对于电话号码,可以只保留前三位和...
在Java中,静态代理和动态代理(JDK Proxy或CGLIB)是常见的实现手段。 7. **观察者模式**:定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java的java....
Java中静态代理和动态代理(JDK动态代理和CGLIB动态代理)是常见实现方式。 6. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。适配器让原本不兼容的类可以一起工作。 7. **策略模式**:定义一系列...
#### 7、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? - **半自动特性**:Mybatis需要手动编写SQL语句,对于关联对象或关联集合对象的查询需要手动编写SQL。 - **全自动工具**:如Hibernate,...
与全自动的Hibernate相比,MyBatis不负责完全自动化的对象关系映射。在Hibernate中,查询关联对象可以直接获取,而MyBatis需要开发者手动编写SQL来完成关联查询。因此,MyBatis被称为半自动ORM工具,它在灵活性和...
MyBatis的延迟加载通常通过CGLIB创建目标对象的代理对象,当访问延迟加载的属性时,实际的SQL查询才会执行。 在与Hibernate的比较中,MyBatis由于需要开发者手动编写SQL语句,因此提供更多的灵活性和控制性。...
- **动态代理**:利用 JDK 动态代理或者 CGLIB 生成代理对象,代理对象实现了 Mapper 接口中定义的方法。当调用代理方法时,实际上会执行 SQL 语句并与数据库交互。 #### 七、MyBatis 配置细节 - **Properties**:...
有两种代理方式:JDK动态代理和CGLIB代理。前者适用于实现了接口的类,后者用于没有接口或接口不完全覆盖所需方法的类。 最后,Spring的核心架包还包含一系列的工具类,如类型转换系统、事件传播、资源处理等,这些...
在Java中,静态代理和动态代理(JDK和CGLIB)都是常见的实现方式。 9. **桥接模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 10. **组合模式**:将对象组合成树形结构以表示部分-整体的层次结构...
- 实现上,利用代理模式(如CGLIB)创建代理对象,在访问关联对象时触发加载。 #### 13. 映射器 - **#{}与${}的区别**: - #{}支持预编译,防止SQL注入。 - ${}直接替换变量值,可能导致SQL注入。 - **模糊查询...
- **类型**:包括JDK动态代理(实现接口)和CGLIB动态代理(子类继承)。 ### 设计模式 - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **工厂模式**:提供创建一系列相关或相互依赖对象的...