向大神求教,spring4 cglib 使用 cglib动态代理问题

向大神求教,Spring 使用 cglib动态代理问题_百度知道
向大神求教,Spring 使用 cglib动态代理问题
提问者采纳
proxy-target-class=&true& 是强制使用CGLIB生成代理去掉这个试试!
来自团队:
其他类似问题
为您推荐:
cglib的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁【图文】Spring中的AOP基石-JAVA的反射机制与动态代理_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
Spring中的AOP基石-JAVA的反射机制与动态代理
内​部​培​训​文​档​。​内​容​很​不​错​。
大小:206.29KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢trackbacks-0
&&&&&JDK自从1.3版本开始,就引入了动态代理,JDK的动态代理用起来非常简单,但是它有一个限制,就是使用动态代理的对象必须实现一个或多个接口&。如果想代理没有实现接口的类可以使用CGLIB包。  CGLIB是一个强大的高性能的代码生成包。它被许多AOP的框架(例如Spring AOP)使用,为他们提供方法的interception(拦截)。Hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联。EasyMock通过使用模仿(moke)对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿(moke)对象。  CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。
&&&&& 以下为模拟案例,在使用CGLIB时需引入cglib-nodep-2.1_3.jar包
定义一个HelloWorld类,注意此处是个类,而不是接口
package com.ljq./** * 定义一个HelloWorld类 *
* @author jiqinlin *
*/public class HelloWorld {
public void sayHelloWorld() {
System.out.println("HelloWorld!");
CglibProxy类
package com.ljq.import java.lang.reflect.Mimport net.sf.cglib.proxy.Eimport net.sf.cglib.proxy.MethodIimport net.sf.cglib.proxy.MethodP/** * 通过Cglib实现在方法调用前后向控制台输出两句字符串 *
* @author jiqinlin * */public class CglibProxy implements MethodInterceptor {
//要代理的原始对象
public Object createProxy(Object target) {
this.obj =
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.obj.getClass());// 设置代理目标
enhancer.setCallback(this);// 设置回调
enhancer.setClassLoader(target.getClass().getClassLoader());
return enhancer.create();
* 在代理实例上处理方法调用并返回结果
* @param proxy
* @param method
被代理的方法
* @param params
该方法的参数数组
* @param methodProxy
public Object intercept(Object proxy, Method method, Object[] params,
MethodProxy methodProxy) throws Throwable {
Object result = null;
// 调用之前
doBefore();
// 调用原始对象的方法
result = methodProxy.invokeSuper(proxy, params);
// 调用之后
doAfter();
private void doBefore() {
System.out.println("before method invoke");
private void doAfter() {
System.out.println("after method invoke");
package com.ljq.public class HelloWorldTest {
public static void main(String[] args) {
HelloWorld helloWorld=new HelloWorld();
CglibProxy cglibProxy=new CglibProxy();
HelloWorld hw=(HelloWorld)cglibProxy.createProxy(helloWorld);
hw.sayHelloWorld();
运行结果为:
阅读(...) 评论()

我要回帖

更多关于 spring4 cglib 的文章

 

随机推荐