Tomcat部署及優化專案
以下是我對spring的一些拙見
spring一點都不是抽象,程式碼裡面很清晰,在業務中難以實現
DI依賴注入:
概念: 當一個型別需要另一個型別時,這兩個型別就產生了依賴關係,那麼我們就可以把其中的一個型別 作為另一個型別的屬性進行對應的注入
三種注入方式:直接注入,普通方法注入,構造方法注入
控制:給物件中的屬性賦值的權利
反轉:一個物件如何獲取它所依賴的物件的引用
AOP面向切面
靜態代理:
概念
原始類:只負責核心功能的類
原始方法:原始類中的方法
代理類:給原始類新增額外功能
靜態方法的本質:
代理類只負責額外功能,原始類只負責核心功能,通過代理類給原始類新增額外功能
缺點:
1.類過載:有一個原始類就需要寫一個代理類
2.額外功能程式碼冗餘,不利於專案的維護
動態代理
1.JDK實現動態代理(基於介面)
ClassLoader:類載入器
//建立代理物件
Proxy.newProxyInstance(ClassLoader,Interfaces,InvocationHandler);
使用動態代理的五大步驟
<!--InvocationHandler這個還是不太理解-->
1.通過實現InvocationHandler介面來自定義自己的InvocationHandler(主要是編寫invoke方法)
2.通過Proxy.getProxyClass獲得動態類
3.通過反射機制獲得代理類的構造方法,方法簽名為 getConstructor(InvocationHandler.class)
4.通過建構函式獲得代理物件並將自定義的InvocationHandler例項物件傳為引數傳入
5.通過代理物件呼叫目標方法
newProxyInstance方法
該方法用來返回一個代理物件,這個方法總共有三個引數:
Proxy.newProxyInstance(ClassLoader,Interfaces,InvocationHandler);
invoke方法
/**
作用:給原始方法新增額外功能
o:代理物件
method:代表原始方法
objects:代表原始方法填充的引數
Object :返回一個Object 型別的返回值
*/
public Object invoke(Object o, Method method, Object[] objects){
}
配置檔案:applicationContext.xml
1.設定被載入的類:原始類
2.切面程式設計
包
給com.hp包以及子包下的UserServiceImpl類的帶有第一個引數為String型別的register方法新增額外功能
<aop:pointcut id="" expression="execution(* com.hp..UserServiceImp.register(String,..))"></aop:pointcut>
類
給所有包下以及子包下的UserService類中帶有第一個引數為String型別的register方法新增額外功能
<aop:pointcut id="" expression="execution(* *..UserServiceImp.register(String,..))"></aop:pointcut>
方法:
維度:只與方法有關,與類和包無關
<aop:pointcut id="" expression="execution(* register(String,..))"></aop:pointcut>
切入點函式:
args只專注與方法的引數
給僅有一個引數為String型別的方法新增額外功能
execution(* *(String))
========================
args(String)
給第一個引數為String型別,後續不管的所有方法新增額外功能
args(String,..)
註解
自定義註解:
//註解新增在方法上
<!--以註解的形式--> <!--註解的全限定名-->
<aop:pointcut id = "pc" expression="@annotation(com.hp.KG)"></aop:pointcut>
3.代理工廠(指向想要代理的物件,原始類的物件)(裡面的name的值不知道怎麼定義的)