1. 程式人生 > >Spring配置檔案中使用aop

Spring配置檔案中使用aop

Spring配置檔案中使用aop applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation

="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd "
>

<!-- 1.目標物件 -->

<bean name="userService" class="cn.example.service.UserServiceImpl" ></bean>

<!-- 2.通知物件 -->

<bean name="myAdvice" class="cn.example.d_springaop.MyAdvice" ></bean>

<!-- 3.把目標物件設定到切點 -->

<aop:config>

<aop:pointcut expression="execution(*cn.

example.service.*ServiceImpl.*(..))" id="pc"/>

<!-- 3.給目標物件設定切面:即給目標物件的指定方法執行前後,要插入執行的方法 -->

<aop:aspect ref="myAdvice" >

<!-- 指定名為before方法作為前置通知 -->

<aop:before method="before" pointcut-ref="pc" />

<!-- 後置 -->

<aop:after-returning method="afterReturning" pointcut-ref="pc" />

<!-- 環繞通知 -->

<aop:around method="around" pointcut-ref="pc" />

<!-- 異常攔截通知 -->

<aop:after-throwing method="afterException" pointcut-ref="pc"/>

<!-- 後置 -->

<aop:after method="after" pointcut-ref="pc"/>

</aop:aspect>

</aop:config>

</beans>

aop:pointcut標籤:

expression屬性:設定目標方法

              語法: expression="execution(目標方法的群路徑)"

目標方法全路徑的寫法:

1. public void cn.example.service.UserServiceImpl.save() //一個完整的方法路徑

2.  void cn.example.service.UserServiceImpl.save() //省略預設的public

3.  * cn.example.service.UserServiceImpl.save() //返回型別不要求 用*取代

4.  * cn.example.service.UserServiceImpl.*() //物件方法全設為目標方法 用*取代

5.  * cn.example.service.UserServiceImpl.*(..) //方法的引數不作要求 用..表示

6.  * cn.example.service.*ServiceImpl.*(..) //所有以ServiceImpl結尾類名 *ServiceImpl表示

7.  * cn.example.service..*ServiceImpl.*(..) //cn.example.service包下的所有子包也包過在內加入.表示

Spring配置檔案中使用aop通知類(目標方法執行前後要執行的程式碼所在類):

public class MyAdvice {

//前置通知:目標方法執行之前呼叫

public void before(){

System.out.println("這是前置通知!!");

}

//後置通知:在目標方法執行之後呼叫

public void afterReturning(){

System.out.println("這是後置通知(如果出現異常不會呼叫)!!");

}

//環繞通知:在目標方法之前和之後都呼叫

public Object around(ProceedingJoinPoint pjp) throws Throwable {

System.out.println("這是環繞通知之前的部分!!");

Object proceed = pjp.proceed();//呼叫目標方法

System.out.println("這是環繞通知之後的部分!!");

return proceed;

}

//異常通知:如果出現異常,就會呼叫

public void afterException(){

System.err.println("出事啦!出現異常了!!");

}

//後置通知

public void after(){

System.out.println("這是後置通知(出現異常也會呼叫)!!");

}

}

目標類和測試類省略

相關推薦

Spring配置檔案使用aop

Spring配置檔案中使用aop applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSche

Spring配置檔案如何使用外部配置檔案配置資料庫連線

版權宣告:本文為博主原創文章,歡迎指正或者轉載。 https://blog.csdn.net/qq_38663729/article/details/78821258 直接在spring的配置檔案中applicationContext.xml檔案中配置資料庫連線也可以,但是有個問題,需要在url

Spring配置檔案配置資料庫連線(mysql,sqlserver,oracle)

xml配置檔案中配置如下: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"

Spring 配置檔案 Bean 的 property 屬性使用示例

在 Spring 配置檔案中,beans 元素是 spring-beans 內容模型的根結點,bean 元素是 beans 元素的子節點,通常 bean 元素用於定義 JavaBean。而 bean 元素包含以下幾種子元素,它們分別是: constructor-arg 元素property 元素

Spring配置檔案配置property標籤的name和ref的區別:

在看李剛的《Java EE企業實戰》,裡面有一個關於Spring的配置的 <bean id=“person” class=“service.Person”> <!-- 控制器呼叫setAxe方法,將容器中的axe bean作為傳入的引數 --> <!–此處的na

Spring 配置檔案 元素 屬性 說明

<beans /> 元素 該元素是根元素。<bean /> 元素的屬性 default-init // 是否開啟懶載入。預設為 false default-dependency-check // 預設為 none default-autowire // 是否自動轉配。預設

spring16-----XML名稱空間和Spring配置檔案的頭

一. 什麼是名稱空間 在 XML 中,元素名稱是由開發者定義的,當兩個不同的文件使用相同的元素名時,就會發生命名衝突。類似package的作用。 這個 XML 文件攜帶著某個表格中的資訊: 1 <table> 2 <tr> 3 <td>

spring配置檔案的使用

spring 3.0 後提供了 註解配置引入,<context:property-placeholder/>,方便。但是往往第一次使用時會遇到此屬性配置進applicationContext.xml檔案中,會出現紅叉:“The prefix "context" for element "conte

Spring配置檔案配置事物

"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/contex

spring配置檔案bean標籤init-method和destroy-method和用註解方式配置

Person類 public class Person { private int i = 0; public Person(){ System.out.println("例項化一個物件"

spring配置檔案classpath與classpath* 的區別

lib和classses下檔案訪問的優先順序 lib>classes 對於效能的影響不在這個裡面: classpath與classpath*區別 classpath:只會在你的classes的路徑中查詢檔案 classpath:不僅包含class路徑,還包含jar中的

Spring配置檔案component-scan 掃描指定的包的類上常用的註解

@Controller 宣告Action元件 @Service 宣告Service元件,eg: @Service("userService") @Repository 宣告Dao元件 @

Spring配置檔案屬性值不能提示的解決辦法(eclipse新增xsd檔案)

原因:eclipse中沒有配置xsd檔案解決辦法:步驟一:把標頭檔案拷貝到你的spring配置檔案中。<?xml version="1.0" encoding="UTF-8"?> <b

springmvc與Spring配置檔案掃描元件分開掃描和直接全掃描的區別

在主容器中(applicationContext.xml),將Controller的註解排除掉 <context:component-scan base-package="com">   <context:exclude-filter type="annotation" expression

spring配置檔案引用外部的properties檔案

要在spring的xml中引用properties檔案中定義的屬性,需要進行特殊的載入,首先需要利用PropertyPlaceholderConfigurer 典型配置如下:<bean id="common.propertyConfigurer"class="org.

Spring配置檔案xsd版本號的問題

今天將以前的一個專案移植到新機器上開發,在原本的機器上跑得好好的專案移植過來之後報了個莫名其妙的錯: 在xml中給我說xsd的版本不對,於是將原本的如下程式碼片: xsi:schemaLocation="http://www.springframework.org/sche

spring配置檔案的 id和name

今天在分析問題時發現一個大家平時都不太注意的spring 配置問題,發出來分享下: 首先澄清一個概念: 同名bean:多個bean 有相同的 name 或者 id,稱之為同名bean <bean> 的id 和 name的區別 id和name都是spring 容器

Spring配置檔案讀取properties檔案的屬性

一般我們會將關於資料庫的配置屬性存放在一個獨立的properties檔案 以下是屬性檔案anyview.properties anyview.driverClassName=com.mysql.jdbc.Driver anyview.url=jdbc:mysql://lo

spring 配置檔案如何注入map list set等型別

先定義一個bean import java.util.List; import java.util.Map; import java.util.Properties; import java.util

通過Spring配置檔案bean的property賦值

基本資料型別賦值-通過Spring配置檔案中bean中的property 擴充套件-以此方式可以通過配置為連線資料的屬性賦值 1、如果是基本資料型別,可以通過setter方法為物件中的屬性設定初