一、CgLib实现动态代理的例子

1、创建Person类

package com.example.cglib;

public class Person {

	public void study(){
System.out.println("study");
} }

  

2、创建CgLibProxy 类

package com.example.cglib;

import java.lang.reflect.Method;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy; public class CgLibProxy implements MethodInterceptor { private Enhancer enhancer = new Enhancer(); public Object getProxy(Class<?> clazz){
enhancer.setSuperclass(clazz);
enhancer.setCallback(this); Object object = enhancer.create(); return object; } @Override
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
System.out.println(arg0.getClass().getName() +"." + arg1.getName()); //执行父类(目标对象Person)的对应方法
Object result = arg3.invokeSuper(arg0, arg2);
System.out.println("执行结束");
return result;
} public static void main(String[] args) {
CgLibProxy proxy = new CgLibProxy(); Person person = (Person)proxy.getProxy(Person.class); System.out.println(person.getClass().getName()); //打印person父类的名字
System.out.println(person.getClass().getSuperclass().getName()); person.study();
} }

  

输出结果:

Cglib通过子类实现父类的方法实现AOP

CgLib实现AOP的更多相关文章

  1. (转)使用CGLIB实现AOP功能与AOP概念解释

    http://blog.csdn.net/yerenyuan_pku/article/details/52864395 使用CGLIB实现AOP功能 在Java里面,我们要产生某个对象的代理对象,这个 ...

  2. Spring进阶之路(10)-Advice简单介绍以及通过cglib生成AOP代理对象

    Advice简单介绍 1. Before:在目标方法运行之前运行织入.假设Before的处理中没有进行特殊的处理.那么目标方法终于会运行,可是假设想要阻止目标方法运行时.能够通过抛出一个异常来实现.B ...

  3. 利用Cglib实现AOP

    前文讲了, 可以利用Spring, Guice等框架提供的容器实现AOP, 如果想绕过容器, 直接注入Class, 可以利用Cglib为对象加上动态代理,实现代码切入, 但是每次调用比较繁琐, 因此我 ...

  4. JAVA动态代理和方法拦截(使用CGLib实现AOP、方法拦截、委托)

    AOP用CGLib更简便.更可控. 动态代理的实现非常优雅. 实体类: public class SampleClass { public String MyFunction1(String inpu ...

  5. 思想无语言边界:以 cglib 介绍 AOP 在 java 的一个实现方式

    0. 前言 上接:基于 Source Generators 做个 AOP 静态编织小实验 作为第三篇,我们基于cglib在java做一个简单的aop例子, 以此简单作为例子说一个思路在什么样的语言里面 ...

  6. jdk动态代理与cglib代理、spring aop代理实现原理

    原创声明:本博客来源与本人另一博客[http://blog.csdn.net/liaohaojian/article/details/63683317]原创作品,绝非他处摘取 代理(proxy)的定义 ...

  7. jdk动态代理与cglib代理、spring aop代理实现原理解析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  8. 何为代理?jdk动态代理与cglib代理、spring Aop代理原理浅析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  9. 【转】Spring AOP 实现之CGLIB

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp91    cglib(Code Generation Library)是 ...

随机推荐

  1. EXPORT_SYMBOL

    EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static函数和变量都会自动导入到kernel 空间 作用 EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开, ...

  2. XML整形以及改行字符串输出

    XML整形 估计如下一样使用XDocument的人比较多,毕竟也是微软推荐使用的. string FormatXml(string Xml) { try { XDocument doc = XDocu ...

  3. java-Java实现mysql事务处理操作

    数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 并非任意的对数据库的操作序列都是数据库事务.数据库事务拥有以下四个特性,习惯上被称之为ACID特性. ...

  4. hbase完整分布式集群搭建

    简介: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop2.8 ha 集群搭建 hbase完整分布式集群搭建 hadoop完整集群遇到问题汇总 Hb ...

  5. 【兼容调试】cffi library '_openssl' has no function, constant or global variable named 'Cryptography_HAS

    重装cryptography就好了. conda uninstall cryptography conda install cryptography https://github.com/pyca/c ...

  6. Java开发环境之IntelliJ IDEA

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 贰章:IntelliJ IDEA安装教程 1)去官网下载IDEA安装包 https://www.jetbrains.com ...

  7. Linux 服务控制与运行级别

    如何控制服务的运行状态?如何切换不同的运行级别? 服务控制 ntsysv 仿图形交互界面,集中配置各种服务启动状态 --level 35:同时对指定运行级别中的服务进行管理,不加仅管理当前运行级别中的 ...

  8. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  9. 后台返回的Json为null的字段不显示的方法

    如果引入的是谷歌的gson的话,需要引入依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> ...

  10. .pro文件部分命令详解

    #引入c++11 CONFIG += C++11 # 引入头文件的路径 INCLUDEPATH += D:\opencv\opencv3.2\configure\install\include # 引 ...