举例场景:springboot启动时扫描所在包及其子包下的所有类,在遇到带有Transactional注解的类时,再判断该类是否有引用接口,如果有,使用JDK动态代理创建代理对象做事务管理,如果没有,则使用Cglib动态代理创建代理对象做事务管理
在这里插入代码片/**
* Jdk动态代理
* @param obj
* @return
*/
public static Object getJdkProxy(Object obj) {
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), (proxy, method, args) -> {
Object result;
try{
//此处前置处理
result = method.invoke(obj, args);
//此处后置处理
}catch (Exception e) {
e.printStackTrace();
throw e;
}
return result;
});
}
/**
* cglib动态代理
* @param obj
* @return
*/
public static Object getCglibProxy(Object obj) {
return Enhancer.create(obj.getClass(), (MethodInterceptor) (o, method, objects, methodProxy) -> {
Object result;
try{
//此处前置处理
result = method.invoke(obj, objects);
//此处后置处理
}catch (Exception e) {
e.printStackTrace();
throw e;
}
return result;
});
}