spring中級

一、基於註解的方式配置bean/bean的裝配

  1. 常用的註解
    @Component:標識爲一個組件
    @Repository:標識爲一個持久層的組件
    @Service:標識爲一個業務層的組件
    @Controller:標識爲一個表現層的組件
    @AutoWired:自動裝配
    @Qualifier:具體的指定要裝配的bean的id值
  2. 開啓註解配置
    <context:component-scan base-package="基包"></context:component-scan>
    use-default-filters="true/false":是否使用默認的過濾
    <context:include-filter type="annotation/assignable"expression="註解的全類名/組件類的全類名"/>
    <context:include-filter>需要配合 use-default-fiters="false"來使用
    <context:exclude-filter type="annotation/assignable"expression="註解的全類名/組件類的全類名"/>
    
  3. @AutoWired
    1. 優先匹配兼容的類型來進行注入.如果有多個兼容的類型匹配,則再嘗試使用被注入的屬性名跟ioc容器中bean的id值進行匹配。
    2. required: 默認情況下,被 @AutoWired 標註的屬性必須要被裝配.可以使用required="false"來改變默認的行爲.
    3. 可以使用@Qualifier來具體指定要裝配的bean的id值.

二、AOP

1. 動態代理

  1. 動態代理實現的方式:
    jdk動態代理 基於接口實現代理
    cglib動態代理 基於子類的方式實現代理
    javassist動態代理 基於子類的方式實現代理

  2. jdk的動態代理

    public Object getLoggingProxy(){
    	//定義代理對象
    	Object proxy ;
    	/**
    	 * loader:  ClassLoader 類加載器
    	 * interfaces:  目標類的所接口,目的是獲取接口中的方法
    	 * h: InvocationHandler
    	 */
    	ClassLoader loader = proxy.getClass().getClassLoader();
    	Class[] interfaces = proxy.getClass().getInterfaces();
    	InvocationHandler h = new InvocationHandler() {
    		/**
    		 * proxy:代理對象   在invoke方法中一般不會用
    		 * method:正在調用的方法
    		 * args:調用方法傳入的參數
    		 */
    		@Override
    		public Object invoke(Object proxy, Method method, Object[] args)
    				throws Throwable {
    			String methodName = method.getName();
    			//加日誌
    			System.out.println("ATGUIGU===>The method "+methodName+" begins with "+ Arrays.asList(args));
    			//執行目標方法
    			Object result = method.invoke(proxy, args);
    			//加日誌
    			System.out.println("ATGUIGU===>The method "+methodName+" ends with " + result );
    			return result;
    		}
    	};
    	proxy = (Object) Proxy.newProxyInstance(loader, interfaces, h);
    	return proxy ;
    }
    

2.SpringAOP

  1. 切面
    將橫切關注點模塊化後形成切面.
  2. 通知
    前置通知
    在這裏插入圖片描述
    後置通知
    在這裏插入圖片描述
    返回通知
    在這裏插入圖片描述
    異常通知
    在這裏插入圖片描述
    環繞通知
    在這裏插入圖片描述
    3. 基於註解方式配置AOP
    在這裏插入圖片描述
    4. 基於xml方式配置AOP
    在這裏插入圖片描述
    1. 切面的優先級
      如果是基於註解的方式,可以使用@Order(值)來指定切面的優先級.值越小優先級越高
      如果是基於xml的方式,可以使用order屬性來指定切面的優先級.
    2. 重用切入點表達式
      在這裏插入圖片描述
      在這裏插入圖片描述
      在這裏插入圖片描述

Spring 事務管理

1. 基於註解

  1. 配置事務管理器以及開啓事務註解
    在這裏插入圖片描述
    tx:annotation-driven中 transaction-manager的默認值是transactionManager,如果當前事務管理器的id值就是transactionManager,那麼transaction-manager的配置可以省略.如果當前事務管理器的id值不是transactionManager,那麼就必須在transaction-manager中指定當前的事務管理器的id值。
  2. @Transactional
    該註解可以加到類上,也可以加到方法上。加到類上的對當前類中所有的方法都起作用。如果類與方法上都加了該註解,則方法上的優先於類上的.
  3. 事務的屬性
    在這裏插入圖片描述

基於XML

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章