4-2cglib 动态代理
JDK的动态代理依靠接口实现,如果有些类并没有实现接口,则不能使用JDK代理,这就要使用cglib动态代理了。
Cglib动态代理
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
BookCadeImpl1.java
- package net.battier.dao.impl;
- /**
- * 这个是没有实现接口的实现类
- *
- * @author student
- *
- */
- public class BookFacadeImpl1 {
- public void addBook() {
- System.out.println("增加图书的普通方法...");
- }
- }
3、BookFacadeProxy.java
- package net.battier.proxy;
- import java.lang.reflect.Method;
- import net.sf.cglib.proxy.Enhancer;
- import net.sf.cglib.proxy.MethodInterceptor;
- import net.sf.cglib.proxy.MethodProxy;
- /**
- * 使用cglib动态代理
- *
- * @author student
- *
- */
- public class BookFacadeCglib implements MethodInterceptor {
- private Object target;
- /**
- * 创建代理对象
- *
- * @param target
- * @return
- */
- public Object getInstance(Object target) {
- this.target = target;
- Enhancer enhancer = new Enhancer();
- enhancer.setSuperclass(this.target.getClass());
- // 回调方法
- enhancer.setCallback(this);
- // 创建代理对象
- return enhancer.create();
- }
- @Override
- // 回调方法
- public Object intercept(Object obj, Method method, Object[] args,
- MethodProxy proxy) throws Throwable {
- System.out.println("事物开始");
- proxy.invokeSuper(obj, args);
- System.out.println("事物结束");
- return null;
- }
- }
4、TestCglib.java
- package net.battier.test;
- import net.battier.dao.impl.BookFacadeImpl1;
- import net.battier.proxy.BookFacadeCglib;
- public class TestCglib {
- public static void main(String[] args) {
- BookFacadeCglib cglib=new BookFacadeCglib();
- BookFacadeImpl1 bookCglib=(BookFacadeImpl1)cglib.getInstance(new BookFacadeImpl1());
- bookCglib.addBook();
- }
- }
转载于:https://www.cnblogs.com/guoliangxie/p/5301782.html
4-2cglib 动态代理相关推荐
- 【spring】动态代理
代理 动态代理 特点:字节码随用随创建,随用随加载 作用:不修改源码的基础上对方法增强 分类:基于接口的动态代理.基于子类的动态代理 基于接口的动态代理: 涉及的类:Proxy 提供者:JDK ...
- (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!
一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A ...
- Java动态代理和静态代理区别
静态代理 package staticproxy;/*** 接口* @author newtouch**/ public interface IHello {public void sayHello( ...
- java动态代理【一】
java动态代理的定义:为其他目标类的方法增加切面的逻辑,即在执行目标类方法的时候,先去执行一段如校验检测的逻辑代码.java通俗一点就是生成一个继承目标类的子类,并在每个调用方法都添加一段逻辑. 应 ...
- 支撑Java框架的基础技术:泛型,反射,动态代理,cglib
以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...
- 支撑Spring的基础技术:泛型,反射,动态代理,cglib等
1.静态代码块和非静态代码块以及构造函数 出自尚学堂视频:<JVM核心机制 类加载全过程 JVM内存分析 反射机制核心原理 常量池理解> public class Parent {stat ...
- 【spring】初识aop(面向切面编程) 使用jdk动态代理
BankServiceIImple.java 代码实现: package com.zzxtit.aop;import java.math.BigDecimal;public interface Ban ...
- java静态代理与动态代理
2019独角兽企业重金招聘Python工程师标准>>> 代理模式是java常见的设计模式.其目的是为其他对象提供一个代理以控制对某个真实对象的访问.通过代理类这一中间层,有效控制对真 ...
- Java动态代理机制
在Java的动态代理机制中,有两个重要的类.一个是InvocationHandler,另一个是Proxy. InvocationHandler:每一个动态代理类都必须要实现InvocationHand ...
- java 反射 动态代理
在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...
最新文章
- ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge
- 用SC命令 添加或删除windows服务提示OpenSCManager 失败5
- 复制不用说yes的方法
- java反射的编译过程_Java反射机制小结和实际操作
- 计算机网络技术发源于什么,计算机网络基础试题和答案
- 剑指offer之打印链表的倒数第N个节点的值
- 【CTF WEB】反序列化
- mybatis调用oracle存储过程例子.
- Struts12---文件的下载
- AMP (LAMP/WAMP)
- 局域网网络相关的问题
- Hyperledger Fabric 实战(八):couchdb 丰富查询 selector 语法
- 动态引入js文件和css样式表文件
- C语言练习-绘制金字塔
- linux恢复树莓派内存卡容量,找回树莓派SD卡剩余空间
- 利用python爬取飞猪信息_手把手教你使用Python爬取西刺代理数据(上篇)-阿里云开发者社区...
- 西子凌波回复集5(网友整理版)
- ArcGIS 在线地图加载插件介绍
- C语言控制51单片机音乐报告,51单片机_音乐_天空之城_C语言
- Cisco思科路由器配置GRE通道的简单例子
热门文章
- 拼多多2018校招内推编程-大整数相乘
- HTTPRunner学习笔记
- 真香 自从用了Charles,Fiddler已经被我彻底卸载了
- linux rec命令_文件过多时ls命令为什么会卡住?
- python办公入门经典_Python3入门经典100例
- anaconda如何做python笔记_python笔记
- opencv表面缺陷检测_机器视觉表面缺陷检测 光学元件瑕疵检测
- 云服务器学习linux_云服务器怎么选linux系统
- php 查询cpu使用率,php获取CPU使用情况的代码
- Pytorch基础(一) 初始tensor