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;
}
@Override
public 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…