JAVA框架spring將通知織入目標物件
準備:
1導包,如圖:
2準備目標物件:我們這裡以一個service為例:
public class UserServiceImpl { public void save() { System.out.println("儲存"); //int i = 1/0; } public void delete() { System.out.println("刪除!"); } public void update() { System.out.println("更新!"); } public void find() { System.out.println("查詢"); } }
3,準備通知,程式碼:
import org.aspectj.lang.ProceedingJoinPoint; 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.out.println("異常通知"); } //之後通知,無視異常 public void after(){ System.out.println("之後通知,無視異常"); }
4,配置xml檔案
在配置xml檔案之前,急著匯入aop約束(自查)
看程式碼:
<?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: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/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd "> <!-- 目標物件 --> <bean name="user" class="com.fei.ServiceDemo.UserServiceImpl"></bean> <!-- 通知物件 --> <bean name = "myAdvice" class="com.fei.testaop.MyAdvice"></bean> <!-- 配置切入點 --> <aop:config> <!-- 表示式 public void com.fei.ServiceDemo.UserServiceImpl.save() public許可權的返回值為空的xx包下的save方法,空引數 * com.fei.ServiceDemo.UserServiceImpl.save(..) 預設許可權為public,返回值任意的xx包下的save方法,任意引數 * com.fei.ServiceDemo.UserServiceImpl.*(..) 預設許可權為public,返回值任意的xx包下的所有方法,任意引數 * com.fei.ServiceDemo.*ServiceImpl.*(..) 預設許可權為public,返回值任意的字尾為ServiceImpl包下的所有方法,任意引數 * com.fei.ServiceDemo..*ServiceImpl.*(..) 預設許可權為public,在ServiceDemo包及其子包下的,返回值任意的字尾為ServiceImpl包下的在所有方法,任意引數 --> <!-- 下面是準備通知 --> <aop:pointcut expression="execution(* com.fei.ServiceDemo.UserServiceImpl.*())" id="pc"/> <aop:aspect ref="myAdvice"> <aop:before method="before" pointcut-ref="pc"/> </aop:aspect> </aop:config> </beans>
程式碼中有解釋,這樣我們就配置好了,然後我們準備一個測試:
public class Demo1 {
@Test
public void test1() {
ApplicationContext ac1 = new ClassPathXmlApplicationContext("applicationContext.xml");
UserServiceImpl b=(UserServiceImpl)ac1.getBean("user1");
b.save();
System.out.println();
}
}
我們看結果:
這是提前通知
儲存
我們這裡用的用的是提前通知,其他通知一趟在xml配置,程式碼如下:
<aop:config>
<!-- 表示式 public void com.fei.ServiceDemo.UserServiceImpl.save() public許可權的返回值為空的xx包下的save方法,空引數 * com.fei.ServiceDemo.UserServiceImpl.save(..) 預設許可權為public,返回值任意的xx包下的save方法,任意引數 * com.fei.ServiceDemo.UserServiceImpl.*(..) 預設許可權為public,返回值任意的xx包下的所有方法,任意引數 * com.fei.ServiceDemo.*ServiceImpl.*(..) 預設許可權為public,返回值任意的字尾為ServiceImpl包下的所有方法,任意引數 * com.fei.ServiceDemo..*ServiceImpl.*(..) 預設許可權為public,在ServiceDemo包及其子包下的,返回值任意的字尾為ServiceImpl包下的在所有方法,任意引數 --> <aop:pointcut expression="execution(* com.fei.ServiceDemo.UserServiceImpl.*())" id="pc"/> <aop:aspect ref="myAdvice"> <!-- 提前通知 --> <aop:before method="before" pointcut-ref="pc"/> <!-- 之後通知 --> <aop:after method="after" pointcut-ref="pc"/> <!-- 環繞通知 --> <aop:around method="around" pointcut-ref="pc"/> <!-- 異常通知 --> <aop:after-throwing method="afterException" pointcut-ref="pc"/> <!-- 之後通知,異常會不通知 --> <aop:after-returning method="afterReturning" pointcut-ref="pc"/> <!-- 提前通知 --> </aop:aspect> </aop:config>我們看結果:
這是提前通知 環繞前通知 儲存 之後通知 環繞後通知! 之後通知,無視異常
好,到這裡,spring的aop已經瞭解一些了。
相關推薦
JAVA框架spring將通知織入目標物件
準備:1導包,如圖:2準備目標物件:我們這裡以一個service為例:public class UserServiceImpl { public void save() { System.out.println("儲存"); //int i = 1/0; }
java框架spring的依賴註入初步理解
而是 理念 依賴 註入 屬於 程序設計 之前 調用 每次 java框架的spring作為整個工程的統領者,可以有效地管理各層的對象,有效的協調運行,當系統西藥重構時,可以極大地減少改寫代碼的量。 依賴註入和控制反轉屬於同一個概念,在java中當某個類(調用者)需要另
JAVA框架 Spring 依賴註入
div 設置 color pack ssp getbean lap support .com 一:介紹 情景:我們在給程序分層的時候:web層、業務層、持久層,各個層之間會有依賴。比如說:業務層和持久層,業務層的代碼在調用持久層的時候,傳統方式:new 持久層類。 進而進行
JAVA框架 Spring 註解註入
.html class IT soft pri 涵蓋 java 復制 掃描 一、首先需要引入jar包:spring-aop-4.2.4.RELEASE.jar。(在spring解壓包libs內)。 二、如果註解方式註入依賴的對象,需要引用新的約束。 內的:xsd-conf
Java框架spring Boot學習筆記(八):Spring相關概念
擴展 靜態 輕量級 想要 spring配置 核心 使用 oot 調用方法 Spring是開源、輕量級、一站式框架。 Spring核心主要兩部分 aop:面向切面編程,擴展功能不是修改源代碼實現 ioc:控制反轉,比如一個類,在類裏面有方法(不是靜態的方法),想要調用類
Java框架spring Boot學習筆記(十四):log4j介紹
inf alt 技術分享 images 使用 image 詳細 配置文件 -128 功能 日誌功能,通過log4j可以看到程序運行過程的詳細信息。 使用 導入log4j的jar包 復制log4j的配置文件,復制到src下面 3.設置日誌級別
Java框架-Spring MVC理解001
welcome 如果 bean resource onf lang spa lan 檢測 Spring MVC理解 最近在讀一本《看透springMVC》的書,從了解到了一些更加精細系統的知識,邊讀變分享吧。 1.servlet--Spring MVC的本質 2.Sprin
Java框架-Spring MVC理解002-關聯源代碼
java 精華 -a lib info style png 搜索結果 優秀 Spring MVC-關聯源代碼 首先說一下我們為什麽要關聯源代碼: 其實,我覺得閱讀源碼是一個非常好的學習方式,在我們日常工作中或多或少都會接觸一些開源代碼,比如說最常用的非常流行的Strut
JAVA 框架-Spring-AOP面向切面
類型 .com fig cto assert onf con app urn AOP(Aspect Orient Programming),我們一般稱為面向方面(切面)編程,作為面向對象的一種補充,用於處理系統中分布於各個模塊的橫切關註點,比如事務管理、日誌、緩存等等。AO
Java框架-Spring的jdbc、連線池及事務管理
1. Spring的AOP程式設計 1.1 純xml程式設計 <!--通知配置型別--> <aop:config> <!--設定切面--> <aop:aspect ref="logger"> <!-
Java框架-Spring基於註解的IOC配置及純註解
註解配置與xml配置都實現了減低程式間耦合的功能。 不同公司由不同習慣,有可能是純xml、純註解(很少)或者xml與註解混合使用(基於註解的IOC配置)。 1. 基於註解的IOC配置 1.1 建立一個簡單案例 1.1.1 建立專案,新增依賴(pom.xml)
Java框架-Spring概念及純xml配置
1. 三層架構中的spring及spring概述 1.1 三層架構中的spring Spring框架對三層架構都有支援,dao提供支援(如JDBCTemplate)、service提供事務支援、web提供了springmvc框架支援等。 1.2 Spring的
Spring AOP @Aspect織入不生效,不執行前置增強織入@Before
想寫一個AOP,主要有2個用意,, 第一個用意是做後端的防表單重複提交的token驗證。 第二個用意是對後臺JSR303 Validator的校驗結果做一個統一處理,不想把對校驗結果的處理分散在每個controller方法中 @ResponseBody @Request
自己試驗在spring的環繞通知裡獲取目標物件的類名和目標方法的引數類名,用於根據自定義註解判斷訪問許可權,有沒有更好的辦法,高手指點一下
public Object doInBusiness(ProceedingJoinPoint pjp) throws Throwable{ Object[] args = pjp.getArgs(); Class[] argsClass = new Class[ar
Spring 將請求引數封裝成物件
簡單描述:最近手裡的模組,前後臺之間需要傳遞很多的引數,使用封裝的PageData,來獲取請求引數的,作微服務遷移的時候,就涉及到需要把引數從pagedata裡取出來,一個一個的放到物件的屬性中。就很麻煩。後來老大在點評大家的程式碼的時候,就說了,這樣寫雖然能實現功能,但是效果很不好,體現不出java面向物件
反射3:利用java反射技術將查詢結果封裝成物件
package cn.itcast.domain; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import j
Spring AOP-通知-為目標方法織入多個切面
AOP-通知-為目標方法織入多個切面 開發中可能會遇到為目標方法織入多個切面,比如前置。後置通知都需要 介面 package com.hk.spring.aop06; public interface SomeService { publi
AOP 為目標方法織入多個通知
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc
將spring源碼導入到eclipse中
所有 eas build clas ges neon 不同 路徑 系統變量 前置條件: 1. 正確安裝jdk,並配置好JAVA_HOME、PATH。(我這裏安裝的是jdk1.8) 2. 正確安裝好eclipse。(我的eclipse版本是: Neon Release (4.
Spring MVC框架下 將數據庫內容前臺頁面顯示完整版【獲取數據庫人員參與的事件列表】
XML 獲取 utf-8 字段 eas jsp r.java 增刪 otp 1.書寫jsp頁面包括要顯示的內容【people.jsp】 <!-- 此處包括三個方面內容: 1.包含 文本輸入框 查詢按鈕 查詢結果顯示位置 (p