1.3.2 ×Ö½ÚÔöÇ¿CGLIB£ºÊµÏÖÀà
? ×Ö½ÚÂëÔöÇ¿£ºcglib¡¢javaassist
? CGLIB £º ºËÐÄjar£ºcglib-....jar ÒÀÀµjar£ºasm...jar
1.3.2.1 Ä¿±êÀà
//Ä¿±êÀ࣬ûÓÐ½Ó¿Ú public class BookService{ public void addBook() { System.out.println(\); } public void updateBook() { System.out.println(\); } } 1.3.2.2 ÇÐÃæÀà
/** * ÇÐÃæÀࣺÌṩ¶à¸ö֪ͨ£¨advice£©£¬Í¨Öª¾ÍÊÇÓÃÓÚÔöÇ¿´úÂë * @author * */ public class MyAspect { public void before(){ System.out.println(\¿ªÆôÊÂÎñ\); } public void after(){ System.out.println(\Ìá½»ÊÂÎñ\); } } 1.3.2.3 ¹¤³§
public class MyBeanFactory { //ʹÓÃcglib ´´½¨´úÀíÀ࣬Ŀ±êÀàûÓнӿڡ£ // * cglib¶¯Ì¬µÄ´´½¨Ä¿±êÀàµÄ×ÓÀà // *** Ä¿±êÀà±¾Éí²»ÄÜΪfinal£¬public final class BookService{ £¬ÔÚ¶¨Òå // *** µ«Ä¿±êÀàʵÀý¿ÉÒÔʱfinal£¬final BookService bookService = new BookService(); £¬ÔÚʹÓᣠ// * cglibµÄʹÓã¬ÀàËÆjdk¶¯Ì¬´úÀí, cglibµÄMethodInterceptor½Ó¿Ú µÈЧÓë jdk InvocationHandler½Ó¿Ú public static BookService getBean() { //1 Ä¿±êÀà final BookService bookService = new BookService(); //2 ÇÐÃæÀ֪ࣨͨ£© final MyAspect myAspect = new MyAspect(); //3 ´úÀíÀà // 3.1 ´´½¨ºËÐÄÀà Enhancer enhancer = new Enhancer(); // 3.2 È·¶¨´úÀíÀุÀà ,¼°Ä¿±êÀà enhancer.setSuperclass(bookService.getClass()); // 3.3 ±àд»Øµ÷--Ö´ÐÐ enhancer.setCallback(new MethodInterceptor(){ //ǰ3¸ö²ÎÊýÓëjdkÏàͬ @Override public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { //1 Ö´ÐÐ֪ͨ--¿ªÆô myAspect.before(); } } //2 Ö´ÐÐÄ¿±êÀà·½·¨ Object obj = method.invoke(bookService, args); // Ö´ÐеÄʱ´úÀíÀàµÄ¸¸À࣬¼°Ä¿±êÀà methodProxy.invokeSuper(proxy, args); //3 Ö´ÐÐ֪ͨ--Ìá½» myAspect.after(); return obj; }}); // 3.4 ´´½¨´úÀíÀà return (BookService)enhancer.create(); 1.3.2.4 ²âÊÔ
public class TestApp { @Test public void demo01(){ //×Ô¼º´´½¨ÊµÀý BookService bookService = new BookService(); bookService.addBook(); bookService.updateBook(); } @Test public void demo02(){ //spring´´½¨ÊµÀý£¬¼°¹¤³§´´½¨¡£ BookService bookService = MyBeanFactory.getBean(); bookService.addBook(); bookService.updateBook(); } }
1.3.3 ×ܽá
? springÉú²ú´úÀíʱ£¬Èç¹ûÓнӿÚ+ʵÏÖÀ࣬springµ×²ãʹÓö¯Ì¬´úÀí¡£
? springÉú²ú´úÀíʱ£¬Èç¹ûÖ»ÓÐʵÏÖÀ࣬springµ×²ãʹÓÃcglib¡£ ?
1.4 spring ´úÀí¹¤³§
? ? ?
ÈÃspringÉú²ú´úÀíÀ࣬´úÀíÀàÄ¿µÄ£º¶ÔÄ¿±êÀà½øÐÐÔöÇ¿¡£ ´úÀíÀཫ Ä¿±êÀà Óë ÇÐÃæÀàÖÐ֪ͨ½áºÏÔÚÒ»Æð¡£
springÖ´ÐÐ֪ͨʱ£¬²»ÄÜÈ·¶¨¾ßÌåÖ´ÐÐÄĸö·½·¨£¬ÓÚÊÇÌṩ֪ͨÀàÐÍ£¬È·¶¨Ö´Ðеķ½·¨Ãû³Æ¡£ ´æÔÚÒ»¸ö×éÖ¯ aopÁªÃËalliance¹æ¶¨aop¹æ·¶£¬spring Ö§³Öaop¹æ·¶¡£ aopÁªÃ˶¨Òå ֪ͨÀàÐÍ£º5ÖÖ
ǰÖÃ֪ͨ£ºÄ¿±ê·½·¨Ö®Ç°£¬½Ó¿Ú£ºMethodBefoerAdvice ºóÖÃ֪ͨ£ºÄ¿±ê·½·¨Ö®ºó£¬½Ó¿Ú£ºAfterReturningAdvice »·ÈÆÍ¨Öª£ºÄ¿±ê·½·¨Ç°ºó£¬½Ó¿Ú£ºMethodInterceptor¡¾¡¿ Å׳ö֪ͨ£ºÄ¿±ê·½·¨Òì³££¬½Ó¿Ú£ºThrowsAdvice
Òý½é֪ͨ£ºÄ¿±êÀàÌí¼Ó·½·¨»ò×ֶΣ¬½Ó¿Ú£ºIntroductionInterceptor£¨Á˽⣩
//»·ÈÆ try{ //ǰ ---ǰÖà //Ä¿±ê·½·¨ //ºó ---ºóÖà } catch(e ){ //Å׳ö } 1.4.1 µ¼Èëjar
? ºËÐÄjar£ºcore¡¢beans¡¢context¡¢expression¡¢logging ? aop¹æ·¶£ºaop-alliance ? aopʵÏÖ£ºaop