Java动态代理机制——Cglib
上一篇说过JDK动态代理机制,只能代理实现了接口的类,这就造成了限制。对于没有实现接口的类,我们可以用Cglib动态代理机制来实现。
Cglib是针对类生成代理,主要是对用户类生成一个子类。因为有继承,所以Cglib也有个限制,就是不能代理用final修饰的类。
定义一个具体实现类Person:
package wang.dao;
public class Person {
	public void eat()
	{
		System.out.println("吃的方法。。。");
	}
	public void sleep()
	{
		System.out.println("睡的方法。。。");
	}
	public void study()
	{
		System.out.println("学的方法。。。");
	}
}
定义一个Cglib代理处理器:
package wang.proxy; 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 MyCglibProxy 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();
} @Override
public Object intercept(Object object, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
//在这里我们可以调用其他方法(切面编程的思想),这里我们只写输出语句
System.out.println("代理前执行的方法。。。"); proxy.invokeSuper(object, args); System.out.println("代理后执行的方法。。。"); return null;
} }
定义测试类:
package wang.test; import wang.dao.Person;
import wang.proxy.MyCglibProxy; public class CglibTest { /**
* @param args
*/
public static void main(String[] args) { MyCglibProxy proxy = new MyCglibProxy();
Person person = (Person) proxy.getInstance(new Person());
person.eat();
person.sleep();
person.study(); } }
Java动态代理机制——Cglib的更多相关文章
- 详解java动态代理机制以及使用场景
		
详解java动态代理机制以及使用场景 https://blog.csdn.net/u011784767/article/details/78281384 深入理解java动态代理的实现机制 https ...
 - 大厂高级工程师面试必问系列:Java动态代理机制和实现原理详解
		
代理模式 Java动态代理运用了设计模式中常用的代理模式 代理模式: 目的就是为其他对象提供一个代理用来控制对某个真实对象的访问 代理类的作用: 为委托类预处理消息 过滤消息并转发消息 进行消息被委托 ...
 - Java 动态代理机制详解
		
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
 - Java 动态代理机制分析及扩展
		
Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...
 - [转]Java 动态代理机制分析及扩展
		
引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...
 - java动态代理机制
		
首先了解代理设计模式,其思想是为其他对象提供一种代理以控制对这个对象的访问. java动态代理就是遵循这种思想,spring中的AOP实现原理就是java的动态代理. 在java的动态代理机制中,有两 ...
 - Java 动态代理机制分析及扩展--转
		
http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...
 - Java 动态代理机制分析及扩展,第 1 部分
		
Java 动态代理机制分析及扩展,第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/ 本文通过分析 Java 动态代理的机制和特 ...
 - 详解Java动态代理机制
		
之前介绍的反射和注解都是Java中的动态特性,还有即将介绍的动态代理也是Java中的一个动态特性.这些动态特性使得我们的程序很灵活.动态代理是面向AOP编程的基础.通过动态代理,我们可以在运行时动态创 ...
 
随机推荐
- 兔子--Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK
			
错误原因: Activity打开别的Activity的时候会默认把新的Activity放到自己的task中,所以不用指定,可是别的地方就得指定了. 解决的方法:intent.addFlags(Inte ...
 - windows编程之菜单操作
			
分清几个概念 <1>"主菜单" 和 "顶层菜单" 是一个意思. <2>主菜单中的项目叫做 "弹出菜单" 或者 &qu ...
 - TCP慢启动算法
			
慢启动定义 慢启动,是传输控制协议使用的一种阻塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段的数目.这种情况一直保持到要么没有收到一些段,要 ...
 - CSS 垂直居中的5种实现方法
			
利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择那个正确的方法.我下面说明一下我看到的好的方法和怎么来创建一个好的居中网站. 使用 CSS 实现垂直居中并不容易.有些 ...
 - Javascript 常用
			
第一步,实现百度输入法的页面布局 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
 - java代码如何快速添加作者描述的注释最好能有详细的图解
			
MyEclipse 中自动插入作者.注释日期等de快捷键方法依次打开然后找到 Window -->Preferences->Java->Editor->Templates,在这 ...
 - C++ 类中指向函数的指针 以及 类模板
			
C++类中总是出现诸如下面的情况 这是一篇深入浅出讲解函数指针的文章,值得参考! http://blog.csdn.net/lishuhuakai/article/details/18276477 关 ...
 - poj2459 Treasure Exploration  (闭包+二分)
			
这道题是让求派出机器人的最少数量,乍一看以为是简单的求最小路径覆盖,后来发现错了,因为有的点可以走多次,而二分中每个点只能走一次,所以要先用floyd进行传递闭包,然后用二分 #include< ...
 - xcode7 没有Empty Application
			
如果你想创建xcode6.01之前版本提供的空工程,其实很简单.1:选择模板 Single View Application2:选中 Main.storyboard,将其删除3:选择项目的 plist ...
 - js 删除本身节点元素
			
var theParent = document.getElementById("bq_ly"); theParent.parentNode.removeChild(thePa ...