代理(Proxy)模式
描述
給某一個(gè)對(duì)象提供一個(gè)代理,并由代理對(duì)象控制對(duì)原對(duì)象的引用,對(duì)象結(jié)構(gòu)型模式忘闻。這種也是靜態(tài)代理
cglib 動(dòng)態(tài)代理
// 設(shè)置增強(qiáng)回調(diào)
public class MyMethodInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("before");
proxy.invokeSuper(obj, args);//執(zhí)行被代理對(duì)象的原有方法
System.out.println("after");
return null;
}
}
// 業(yè)務(wù)方法
public class LeiTikTok {
public void tiktokHaha() {
System.out.println("雷豐陽钝计,tiktok.... haha....");
}
}
// 業(yè)務(wù)方法
public class CglibTest {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
//2、設(shè)置要增強(qiáng)哪個(gè)個(gè)類的功能齐佳。增強(qiáng)器為這個(gè)類動(dòng)態(tài)創(chuàng)建一個(gè)子類
enhancer.setSuperclass(LeiTikTok.class);
//3私恬、設(shè)置回調(diào)
enhancer.setCallback(new MyMethodInterceptor());
LeiTikTok o = (LeiTikTok) enhancer.create();
o.tiktokHaha();
}
}
Spring事務(wù)->聯(lián)想Spring事務(wù)不生效的幾種情況