JAVA-Spring AOP基础 – 代理设计模式

  • 2019 年 10 月 3 日
  • 筆記

????IOC DI???????????????????????????????????????????“???”???????????????????????

 1 @Service   2 public class UserServiceImpl implements UserService {   3         @Autowired   4         private UserDao userDao;   5   6         @Override   7         public void registUser(User user) {   8                 try {   9                         System.out.println("???????");  10                         System.out.println("???????");  11                         System.out.println("???????");  12                         userDao.addUser(user);  13                         System.out.println("???????");  14                 } catch (Exception e) {  15                         System.out.println("????");  16                         e.printStackTrace();  17                 }  18         }  19  20         @Override  21         public void upToVIP(User user) {  22                 try {  23                         System.out.println("???????");  24                         System.out.println("???????");  25                         System.out.println("???????");  26                         userDao.updateUser(user);  27                         System.out.println("???????");  28                 } catch (Exception e) {  29                         System.out.println("????");  30                         e.printStackTrace();  31                 }  32                   33         }  34  35         @Override  36         public void removeUser(User user) {  37                 try {  38                         System.out.println("???????");  39                         System.out.println("???????");  40                         System.out.println("???????");  41                         userDao.deleteUser(user.getId());  42                         System.out.println("???????");  43                 } catch (Exception e) {  44                         System.out.println("????");  45                         e.printStackTrace();  46                 }  47         }  48  49 }

 

??????????????????????????????????????

????????

??????????????

?????????????????????????????????????????????????????

???????????????????? ?????????????????????????????????????????????????????????????????????????? –??spring???????????????

 1 package cn.tedu.staticproxy;   2 public interface SJSkill {   3         public void ?();   4         public void ??();   5 }   6   7 package cn.tedu.staticproxy;   8 public class FBB implements SJSkill{   9         public void ?(){  10                 System.out.println("fbb?????");  11         }  12         public void ??(){  13                 System.out.println("fbb?????");  14         }  15 }  16  17 package cn.tedu.staticproxy;  18 public class JJRStaticProxy implements SJSkill{  19  20         private FBB fbb = new FBB();  21           22         @Override  23         public void ?() {  24                 System.out.println("????????????");  25                 fbb.?();  26                 System.out.println("????????????????");  27         }  28  29         @Override  30         public void ??() {  31                 System.out.println("????????????");  32                 fbb.??();  33                 System.out.println("????????????????");  34         }  35  36 }  37  38 package cn.tedu.staticproxy;  39 import org.junit.Test;  40 public class StaticProxyTest {  41         @Test  42         public void test01(){  43                 JJRStaticProxy jjr = new JJRStaticProxy();  44                 jjr.?();  45                 jjr.??();  46         }  47 }

??????-jdk???????

???jdk?????????????????????????????????????????????????????????????????jdk??api????????

 

??java????????

???????????????????????????????????????????????????????????

???????java?????????????????????????????????????????????????????????????????????????????????????????????java??????????????????????????????????

?????

 1 package cn.tedu.javaproxy;   2   3 import java.lang.reflect.InvocationHandler;   4 import java.lang.reflect.Method;   5 import java.lang.reflect.Proxy;   6   7 import org.junit.Test;   8   9 public class JavaProxyTest {  10         @Test  11         public void test01(){  12           13                 //????  14                 final FBB fbb = new FBB();  15                   16                 //java?????? ??fbb????  17                 /**  18                  * classLoader:??????????????????????????????  19                  * interfaces: ??????????????????????????????????????????????  20                  * invocationHandler: ????????????????????????????????????invoke???  21                  * ????????????????????????????????????????????????????????  22                  */  23                 SJSkill proxy = (SJSkill) Proxy.newProxyInstance(FBB.class.getClassLoader(),FBB.class.getInterfaces()  24                                 ,new InvocationHandler() {  25                                         @Override  26                                         /**  27                                          * proxy: ???  28                                          * method:?????????  29                                          * args:????????????  30                                          */  31                                         public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {  32                                                 if("???".equals(method.getName())){  33                                                         System.out.println("????????????~~");  34                                                         return null;  35                                                 }else{  36                                                         System.out.println("????????");  37                                                         Object returnObj = method.invoke(fbb, args);  38                                                         System.out.println("????????");  39                                                         return returnObj;  40                                                 }  41                                         }  42                                 });  43                 //?????????????????????????????????  44                 //fbb.?();  45                 //fbb.??();  46                 proxy.?();  47                 proxy.??();  48                 proxy.???();  49         }  50 }

????java????????

????

??????-????cglib???????

????CGLIB??????????????????????????????????

????CGLIB??????????????????????????????????????????????????????

????CGLIB????????

????????????????????????????????????

????????????????????????????????????????????

?????

?????????CGLIB????spring-core-3.2.3.RELEASE.jar

?????????????spring?????CGLIB

 1 package cn.tedu.cglibproxy;   2   3 import java.lang.reflect.Method;   4   5 import org.junit.Test;   6 import org.springframework.cglib.proxy.Enhancer;   7 import org.springframework.cglib.proxy.MethodInterceptor;   8 import org.springframework.cglib.proxy.MethodProxy;   9  10 public class CglibProxyTest {  11         @Test  12         public void test01(){  13                 final FBB fbb = new FBB();  14                   15                 //???  16                 Enhancer enhancer = new Enhancer();  17                   18                 //???? -- ????????????????????? ??cglib????????????????????  19                 enhancer.setInterfaces(fbb.getClass().getInterfaces());  20                   21                 //???? -- ????????????cglib?????????????????????????????????  22                 enhancer.setSuperclass(fbb.getClass());  23                   24                 //?????? -- ???????????????????????????????????????????????????????????  25                 enhancer.setCallback(new MethodInterceptor() {  26                         @Override  27                         public Object intercept(Object proxy, Method method, Object[] args,  28                                         MethodProxy methodProxy) throws Throwable {  29                                 if("???".equals(method.getName())){  30                                         System.out.println("???????~~~");  31                                         return null;  32                                 }else{  33                                         System.out.println("???????");  34                                         Object returnObj = method.invoke(fbb, args);  35                                         System.out.println("???????");  36                                         return returnObj;  37                                 }  38                         }  39                 });  40                   41                 //??????  42                 FBB proxy = (FBB) enhancer.create();  43                 proxy.?();  44                 proxy.??();  45                 proxy.???();  46         }  47 }

??CGLIB????????

 

 

??????????????? “???” ????

 1 package cn.tedu.em.service;   2   3 import org.springframework.beans.factory.annotation.Autowired;   4 import org.springframework.stereotype.Service;   5   6 import cn.tedu.em.dao.UserDao;   7 import cn.tedu.em.domain.User;   8   9 @Service  10 public class UserServiceImpl implements UserService {  11  12     @Autowired  13     private UserDao userDao;  14  15     public void upToVIP(User user){  16         userDao.updateUser(user);  17     }  18  19     public void removeUser(User user){  20         userDao.deleteUser(5);  21     }  22  23     public void registUser(User user){  24         userDao.addUser(user);  25     }  26 }  27  28  29 package cn.tedu.em.service;  30  31 import java.lang.reflect.Method;  32  33 import org.springframework.beans.factory.annotation.Autowired;  34 import org.springframework.beans.factory.annotation.Qualifier;  35 import org.springframework.cglib.proxy.Enhancer;  36 import org.springframework.cglib.proxy.MethodInterceptor;  37 import org.springframework.cglib.proxy.MethodProxy;  38 import org.springframework.stereotype.Service;  39  40 @Service  41 public class UserServiceImplCglibProxy {  42  43     @Autowired  44     @Qualifier("userServiceImpl")  45     private UserService userService;  46  47     public UserServiceImplCglibProxy() {  48  49     }  50  51     public UserService getCglibProxy() {  52         Enhancer enhancer = new Enhancer();  53         enhancer.setInterfaces(userService.getClass().getInterfaces());  54         enhancer.setSuperclass(userService.getClass());  55         enhancer.setCallback(new MethodInterceptor() {  56             @Override  57             public Object intercept(Object proxy, Method method, Object[] args,  58                     MethodProxy mproxy) throws Throwable {  59                 try {  60                     System.out.println("???????");  61                     System.out.println("???????");  62                     System.out.println("???????");  63  64                     Object returnObj = method.invoke(userService, args);  65  66                     System.out.println("???????");  67                     return returnObj;  68                 } catch (Exception e) {  69                     System.out.println("????");  70                     e.printStackTrace();  71                     throw new RuntimeException(e);  72                 }  73             }  74         });  75         return (UserService) enhancer.create();  76     }  77 }  78  79 package cn.tedu.em.web;  80  81 import org.springframework.beans.factory.annotation.Autowired;  82 import org.springframework.stereotype.Controller;  83  84 import cn.tedu.em.domain.User;  85 import cn.tedu.em.service.UserServiceImplCglibProxy;  86  87 @Controller  88 public class RegistServlet {  89  90     @Autowired  91     //private UserService userService;  92     //private UserServiceImplJavaProxy proxy;  93     private UserServiceImplCglibProxy proxy;  94     public void regist(){  95         User user = new User(1,"LK","????","[email protected]");  96         //proxy.getJavaProxy().upToVIP(user);  97         proxy.getCglibProxy().upToVIP(user);  98     }  99 }