Mybatis之jdk动态代理和cglib动态代理
Posted 爽走不解释
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis之jdk动态代理和cglib动态代理相关的知识,希望对你有一定的参考价值。
一、导入jar包
相关jar包可去maven中央仓库找====》由此去
二、jdk动态代理
1、首先编写实现类和接口
接口
public interface UserDao
int add(int a,int b);
实现类
@Component
public class UsreDaoImpl implements UserDao
public int add(int a, int b)
System.out.println("执行添加");
return a+b;
二、要编写用来一个用来拦截请求的类(这里就称为黑客类)
核心是实现InvocationHandler接口
public class JdkHk<T> implements InvocationHandler
private Object target;
public JdkHk(Object target)
this.target=target;
//生产代理对象
public Object createProxy()
return Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),new Class[] UserDao.class,this);
//入侵的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
System.out.println("开始入侵!");
args[0]=122;
args[1]=22;
Object invoke = method.invoke(target, args);
System.out.println("入侵结束!");
return invoke;
三、编写我们的测试类
public class hkTest
@Test
public void TestHk()
// 目标对象
UserDao dao = new UsreDaoImpl();
// 黑客对象
JdkHk <UserDao> jdkHk = new JdkHk <>(dao);
// 代理对象
UserDao proxy = (UserDao) jdkHk.createProxy();
// 入侵
System.out.println(proxy.add(9,5));
三、cglib动态代理(也叫spring)
1、首先编写我们cglib黑客类
public class SpringHk implements MethodInterceptor
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable
System.out.println("开始入侵");
Object proceed = methodInvocation.proceed();
System.out.println("入侵结束");
return proceed;
二、使用jdk动态代理类的实现类
@Component
public class UsreDaoImpl
public int add(int a, int b)
System.out.println("执行添加");
return a+b;
jdk动态代理和cglib动态代理最大的区别就体现在这,不用去实现User类的接口
三、编写测试类
@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:beans.xml")
public class SpringHk
@Autowired
@Qualifier("userDaoProxy")
//@Resource(name = "userDaoProxy")
UsreDaoImpl usreDao;
@Test
public void testSpring()
int add = usreDao.add(588, 5);
System.out.println("结果=="+add);
四、图解
以上是关于Mybatis之jdk动态代理和cglib动态代理的主要内容,如果未能解决你的问题,请参考以下文章