Cglib代理简单案例
Cglib代理简单案例
前言:
1,实现对目标类的增强
2,源码后期补齐
步骤
1,添加cglib依赖
2,编写目标类,书写里面的方法
3,实现MethodInterceptor 接口,重写intercept方法
4,执行invokeSuper目标方法前后增强
1,
<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version></dependency>
2,编写目标类,书写里面的方法
package service.Impl;/*** 定义普通类*/
public class PersonSayLanguageService {public void sayLanguage(String languageType){System.out.println("say," + languageType);}}
3,实现MethodInterceptor 接口,重写intercept方法
package cglib;import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class CglibProxy implements MethodInterceptor {// 目标对象private Object target;public CglibProxy(Object target) {this.target = target;}@Overridepublic Object intercept(Object target, Method method, Object[] objects, MethodProxy proxy) throws Throwable {// 在方法调用前进行一些处理System.out.println("Before invoking method:" + method.getName());Object result = proxy.invokeSuper(target, objects);System.out.println("After invoking method:" + method.getName());return result;}
}
4,执行invokeSuper目标方法前后增强
package test;import cglib.CglibProxy;
import net.sf.cglib.proxy.Enhancer;
import service.Impl.PersonSayLanguageService;public class CGLIBProxyExample {public static void main(String[] args) {// 1.创建目标对象PersonSayLanguageService languageService = new PersonSayLanguageService();// 2.创建CGlib代理 enhance对象Enhancer enhancer = new Enhancer();enhancer.setSuperclass(PersonSayLanguageService.class);enhancer.setCallback(new CglibProxy(languageService));// 3.创建代理对象PersonSayLanguageService proxy = (PersonSayLanguageService) enhancer.create();proxy.sayLanguage("中国话");}
}
测试结果:
喜欢我的文章记得点个在看,或者点赞,持续更新中ing…