1. 程式人生 > >Spring IoC和AOP使用擴展(二)

Spring IoC和AOP使用擴展(二)

cor ima 容器 常用 size ops ali class sta

一、IOC的實現方式:

  Set註入:熟悉必須有公共set方法;

  構造器註入:可以根據構造器參數名稱、下標註入;

  p命名空間註入:要求有set方法;

  技術分享圖片

  技術分享圖片

  

  內部bean的實現;

<bean id="userService" class="com.service.UserService">
<property name="userDao">
<bean class="com.dao.UserDao"></bean>
</property>
<!-- 第一種方式 -->
<!-- <constructor-arg > -->


<!-- 設置local屬性默認在當前文件中找 -->
<!-- <ref local="userDao"/> -->
<!-- 設置local屬性默認在全部文件中找 -->
<!-- <ref bean="userDao"/> -->
<!-- </constructor-arg> -->
<!-- 第二種方式 -->
<property name="list">
<list>
<value>qwe</value>

<value>123</value>
</list>
</property>

</bean>

  

  各種數據類型的註入:

list集合的註入

<property name="list"><!-- 給list集合註入 -->

<list>

<value>沾上幹</value>

<value>房頂上</value>

</list>

</property>

set集合的註入

<property name="set"><!-- 給set集合註入 -->

<list>

<value>aaa</value>

<value>bbb</value>

</list>

</property>

數組的註入

<property name="strs"><!-- 給數組註入 -->

<list>

<value>沾上幹1!</value>

<value>房頂上2!</value>

</list>

</property>

map集合的註入

<property name="map"><!-- 給map集合註入 -->

<map>

<entry key="aaa" value="111"></entry>

<entry key="bbb" value="222"></entry>

</map>

</property>

屬性文件的註入

<property name="prop"><!-- 給屬性文件集合註入 -->

<props>

<prop key="a">!!!</prop>

<prop key="b">!!???</prop>

</props>

</property>

註入null值

<property name="NULL"><!-- 註入null值 -->

<null></null>

</property>

註入空串

<property name="KC"><!-- 註入空串 -->

<value></value>

</property>

  二、常用的增強處理


before

前置之增強處理,在目標方法執行之前織入增強處理
AfterReturning 後置增強處理,在目標方法正常執行(不出現異常)後織入增強處理
AfterThrowing 異常增強處理,在目標方法拋出異常後織入增強處理
after 最終增強處理,不管方法是否拋出異常,都會在目標方式執行之後執行
Around 環繞增強處理,在目標方法前後都可以織入增強處理

  

    技術分享圖片

    技術分享圖片

  

    屬性throwing的值,必須和增強方法的異常參數名一致

   技術分享圖片

  三、Spring註解

  @Component:實現Bean組件的定義

  @Repository :用於標註DAO類

  @Service :用於標註業務類

  @Controller :用於標註控制器類

  1、基本類的註解

    在要創建實力的(dao)類上使用對應到@Repository該註解的作用,就等價於:

      <bean id="userDao" class="com.dao.UserDao"></bean>

    類上的註解,spring容器不知道,需要spring掃描,掃描的多個包用逗號隔開

      <context:component-scan base-package="com.dao,com.tools" />

    

  2、環繞通知的註解(AOP註解)

    技術分享圖片

      註意:核心配置文件中一定要讓spring啟用對於@AspectJ註解的支持

    技術分享圖片

    3、切點的簽名

@Component
@Aspect
public class MyLogger {
  @Pointcut("execution(* com.dao.*.*(..))")
  public void cut(){}

  @Around("cut()")
  public void show(ProceedingJoinPoint join){
    System.out.println("環繞增強已經執行");
  }
}

    4、環繞通知加註解


@Aspect //等價於<aop:aspect ref="myLogger"> 定義一個切面,引用它下面的類
@Component //等價於<bean id="myLogger" class="com.tools.MyLogger" />
//描述一個實例
public class MyLogger {
  @Pointcut("execution(* com.dao.*.*(..))")
  public void xx(){}//切點規則簽名

  @Around("xx()")
  //代表的是通知的類型(切點的規則)
  public void printLogger(ProceedingJoinPoint join){
    System.out.println("環繞通知執行前");
try {
  join.proceed();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("環繞通知執行後");
}
@Before("xx()")
public void before(){
System.out.println("前置通知");
}
}

  

Spring IoC和AOP使用擴展(二)