1. 程式人生 > 實用技巧 >Tomcat部署及優化專案

Tomcat部署及優化專案

以下是我對spring的一些拙見

spring一點都不是抽象,程式碼裡面很清晰,在業務中難以實現

DI依賴注入:

概念: 當一個型別需要另一個型別時,這兩個型別就產生了依賴關係,那麼我們就可以把其中的一個型別 作為另一個型別的屬性進行對應的注入

三種注入方式:直接注入,普通方法注入,構造方法注入

IOC控制反轉

控制:給物件中的屬性賦值的權利

反轉:一個物件如何獲取它所依賴的物件的引用

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,..)

註解

自定義註解:

//註解新增在方法上
@Target(ElmentType.METHOD)
//註解生命週期 在執行時,依然可以使用
@Retention(RetentionPolicy.RUNTIME)
public @interface KG{
String value() default "小白";
String name() default "小黑";
}
<!--以註解的形式-->           <!--註解的全限定名-->
<aop:pointcut id = "pc" expression="@annotation(com.hp.KG)"></aop:pointcut>

3.代理工廠(指向想要代理的物件,原始類的物件)(裡面的name的值不知道怎麼定義的)