首页 > 其他分享 >cglib 动态代理

cglib 动态代理

时间:2023-04-26 22:04:02浏览次数:40  
标签:enhancer target Object 代理 proxy cglib 动态 public


CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM(Java字节码操控框架),来转换字节码并生成新的类。除了CGLIB包,脚本语言例如 Groovy和BeanShell,也是使用ASM来生成java的字节码。当不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。所以cglib包要依赖于asm包,需要一起导入。

 

代码:

package com.cglib;

public class UserDao {
	public void addUser() {
		System.out.println("addUser");
	}
}



package com.cglib;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class UserDaoCglib implements MethodInterceptor {
	private Object target;

	public Object getInstance(Object target) {
		this.target = target;
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.target.getClass());
		enhancer.setCallback(this);
		return enhancer.create();
	}

	public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
		System.out.println("begin");
		proxy.invokeSuper(obj, args);
		System.out.println("end");
		return null;
	}

}



测试类:

package com.cglib;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		UserDaoCglib cglib = new UserDaoCglib();
		UserDao userDao = (UserDao) cglib.getInstance(new UserDao());
		userDao.addUser();
	}

}



cglib的maven:

<dependency>
	<groupId>cglib</groupId>
	<artifactId>cglib</artifactId>
	<version>3.1</version>
</dependency>




标签:enhancer,target,Object,代理,proxy,cglib,动态,public
From: https://blog.51cto.com/u_1002776/6228998

相关文章

  • boot-admin整合Quartz实现动态管理定时任务
    淄博烧烤爆红出了圈,当你坐在八大局的烧烤摊,面前是火炉、烤串、小饼和蘸料,音乐响起,啤酒倒满,烧烤灵魂的party即将开场的时候,你系统中的Scheduler(调试器),也自动根据设定的Trigger(触发器),从容优雅的启动了一系列的Job(后台定时任务)。工作一切早有安排,又何须费心劳神呢?因为boot-admin早已......
  • 911s5倒闭后做海外调查问卷还有好用的海外ip代理吗?
    911s5这家知名的海外ip代理宣布倒闭,这给海外调查问卷和其他需要海外ip代理的业务带来了一定的影响。许多行业的从业者在911s5代理倒闭之前,大多数人都使用它的代理服务。然而,现在911s5的退出让许多人感到手足无措。在过去,911s5代理平台在做海外调查问卷方面表现卓越,因此市场上目前......
  • 第二十三章:动态加载脚本和样式
    学习要点:1.元素位置2.动态脚本3.动态样式本章主要讲解上一章剩余的获取位置的DOM方法、动态加载脚本和样式。一.元素位置上一章已经通过几组属性可以获取元素所需的位置,那么这节课补充一个DOM的方法:getBoundingClientRect()。这个方法返回一个矩形对象,包含四个属性:left、top、ri......
  • 17.分类组件Category 动态获取数据
    我们接下来做分类组件Category,这个主要用来管理商品的分类,有一级和二级,可以实现一级与二级之间跳转/pages/category/category.jsx文件内容如下:importReact,{Component}from'react'import{Button,Card,Table,message}from'antd'import{PlusOutlined,......
  • CentOS搭建squid正向代理
    squid介绍官网地址:http://www.squid-cache.org/Squidcache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维......
  • uniapp 动态修改 css 样式
    css使用var注入变量,达到设置动态样式的需求声明css变量时,变量名前面要加两根连词线(--);变量使用kebab-case命名方式,即--header-color而不是--headerColor;变量名大小写敏感,--header-color和--Header-Color是两个不同的变量名;var()函数用于读取变量。接下来,看......
  • sqlmap挂代理走burp
    参考:sqlmap的两种挂代理方式_sqlmap--proxy_杰尼龟会呲水的博客-CSDN博客......
  • 动态规划笔记
    动态规划的原理从做题来看我认为动态规划就是将递归的过程反向,以此来避免反复使用递归的函数进行反复的压栈,弹栈同时避免访问很多已经计算过的分支。就比如f(a)=f(a-1)+f(a-2)这个递推式,假设我们最终想要知道f(n)的值,那么我们可以使用一个递归函数f参数是i,进行递归调用。这样当......
  • JEECG使用反向代理 积木报表无法正常使用的解决方法
    发现JEECG反向代理开启后  重设了Host头,导致积木框架的数据接口url拼接异常Nginx配置增加:#通过反向代理访问积木报表,Jeecg框架内的菜单配置需要写成绝对路径:http://localhost:3000/jeecg-boot/jmreport/list?token=${token}location^~/jeecg-boot/jmreport/{#p......
  • mybatis where标签动态sql问题
    使用where标签注意事项:where标签只会去掉第一个多出来的and和or,使用where标签时要把and放到前面这种情况下生成的SQL更干净,更贴切,不会在任何情况下都有where1=1这样的条件。<selectid="search"resultType="com.example.springweb2.pojo.Member"> selectid,name,a......