1. 程式人生 > >SSM-1第一章 認識SSM框架和Redis

SSM-1第一章 認識SSM框架和Redis

自己 trac ret change 生成 初始 nts static class

第一章 認識SSM框架和Redis 1.1 Spring框架 Sring理念 Ioc 控制反轉 IOC是一個容器,在Spring中,它會認為一切Java資源都是JavaBean,容器的目標是管理Bean和它們之間的關系。 Aop 面向切面編程 第二章 Java設計模式 2.1 java 反射技術 Java反射技術 可以配置:類的全限定名、方法和參數,完成對象的初始化,甚至是反射某些方法。 在Java中反射是通過包java.lang.reflect.*實現的。 2.1.1通過反射構建對象 public class ReflectTmp{ public ReflectTmp(){};
public ReflectTmp(Srting str){}; public void sayHello(Srting str){}; } /* 通過反射獲取對象*/ public ReflectTmp getInstance() { try { object =(ReflectTmp)Class.forName("com.xxx.ReflectTmp").getConstructor(String.class).newInstance("123"); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
| NoSuchMethodException | SecurityException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return object; } 2.1.2 反射方法 public static Object reflectMethod() { Object returnobj = null; ReflectTmpobj1 = newReflectTmp("456"); try { Method method =ReflectTmp.class.getMethod("sayHello", String.class); returnobj = method.invoke(obj1, "hello World !"); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } return returnobj; } 2.2 動態代理和責任鏈模式 動態代理的意義在於生成一個占位(又稱為代理對象),來代理真實對象,從而控制真實對象的訪問。 代理分為兩個步驟:
  1. 代理對象與真實對象建立代理關系
  2. 實現代理對象的代理邏輯方法
2.2.1 JDK動態代理 JDK動態代理是由java.lang.reflect.*包提供的方式,它必須借助一個借接口才能產生代理對象,所以先定義接口。 其次,在JDK動態代理中,要實現代理邏輯類必須去實現java.lang.reflect.InvocationHandler接口,它定義了一個invoke方法,並提供接口數組用於下掛代理對象。 第一步 建立代理對象與真實對象的關系 Procx.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), this); newProxyInstance包含三個參數 第一個:類加載器 第二個:把生成的代理對象掛在哪些接口下 第三個:定義實現方法邏輯的代理類。 第二步 實現代理的邏輯方法 public Object invoke(Object proxy, Method method, Object[]args) throws Throwable{} invoke方法可以實現代理邏輯 三個參數依次為: proxy 代理對象 method 當前調度的方法 args 調度方法的參數 2.2.2 CGLIB動態代理 CGFLIB動態代理優勢在於不用定義接口,只要一個非抽象類就能實現動態代理。 第一步 生成CGLIB代理對象 使用CGLIB的加強者Enhancer,通過設置超類的方式(setSuperclass),然後通過setCallback方法設置哪個類為它的代理類。被設為代理類的對象必須實現接口MethodInterceptor的方法intercept。 第二步實現代理邏輯 public Object intercept(Object proxy, Method method, Object[]args, MethodProxy methodProxy)throws Throwable{ /* CGLIB反射調用真實對象方法*/ Object obj = methodProxy.invokeSuper(proxy, args); return obj; } 2.2.3 攔截器 定義攔截器接口 public interface Interceptor{ public boolean before(Object proxy, Object target, Method method, Object [] args); public boolean around(Object proxy, Object target, Method method, Object [] args); public boolean after(Object proxy, Object target, Method method, Object [] args); } 3個方法的參數依次為:proxy代理對象,target真實對象,method方法,args運行方法的參數。 before方法返回boolean值,它在真實對象前調度。當返回true,則反射真實對象的方法,返回false,則調用around方法。 在反射真實對象方法或者around方法執行後,執行after方法。 攔截器對象在代理對象創建時同時創建,攔截器對象的方法 在代理對象的邏輯處理方法中調用。 2.2.4 責任鏈模式 當一個對象在一條鏈上被多個攔截器處理時,我們把這樣的設計模式成為責任鏈模式,它用於一個對象在多個角色中傳遞的場景。可以使用層層代理的的方式來實現。 public interface HelloWorld{ public void sayHello(String str); } public interface HelloWorldImpl implements HelloWorld{ public void sayHello(String str) { /* xxx*/ } } public static void main(String []args) { HelloWorld proxy1 = (HelloWorld)InterceptorJDKProxy(new HelloWorldImpl(),“com.xxx.Interceptor1”); HelloWorld proxy2 = (HelloWorld)InterceptorJDKProxy(proxy1,“com.xxx.Interceptor2"); HelloWorld proxy3 = (HelloWorld)InterceptorJDKProxy(proxy2,“com.xxx.Interceptor3"); proxy3.sayHello("hello"); } 結果: 【攔截器3的】的before方法執行 【攔截器2的】的before方法執行 【攔截器1的】的before方法執行 hello 【攔截器1的】的after方法執行 【攔截器2的】的after方法執行 【攔截器3的】的after方法執行 before方法按照從最後一個攔截器到第一個攔截器的加載順序執行,after按照從第一個攔截器到最後一個攔截器的加載順序執行。 2.3 觀察者模式 觀察者模式又稱為發布訂閱模式,是對象的行為模式。觀察者模式定義了一種一對多的依賴關系,讓多個觀察者同時監視著被觀察者,當觀察者發生變化的時候,通知所有觀察者,並讓其自動更新自己。 第一步 定義被觀察者 首先繼承java.util.Observable類 觀察者的方法: /* 添加觀察者*/ addObserver(Observer observer); /* 告知觀察者 被觀察者發生了改變,如果沒有,則無法觸發其行為*/ setChanged(); /* 告知觀察者,讓他們發生相應的動作,並將參數傳遞給觀察者*/ notifyObservers(object obj); 第二步 定義觀察者 觀察者要實現 java.util.Observer接口的update()方法 2.4 工廠模式和抽象工廠模式 2.5 創建者模式 創建者模式屬於對象的創建模式。可以將一個產品的屬性與產品的生成過程分開,從而使一個建造過程中生成具有不同屬性的產品對象。

SSM-1第一章 認識SSM框架和Redis