spring框架學習 四 註解方式AOP

2022-09-07 04:06:06 字數 2992 閱讀 7700

註解配置業務類

使用@component("s") 註解productservice 類

package

com.how2j**a.service;

import

org.springframework.stereotype.component;

@component(

"s")

public

class

productservice

}

註解配置切面

@aspect 註解表示這是乙個切面

@component 表示這是乙個bean,由spring進行管理

@around(value = "execution(* com.how2j**a.service.productservice.*(..))") 表示對com.how2j**a.service.productservice 這個類中的所有方法進行切面操作

package

com.how2j**a.aspect;

import

org.aspectj.lang.proceedingjoinpoint;

import

org.aspectj.lang.annotation.around;

import

org.aspectj.lang.annotation.aspect;

import

org.springframework.stereotype.component;

@aspect

@component

public

class

loggeraspect

}

springconfig.xml

去掉原有資訊,新增如下3行

package="com.how2j**a.aspect"/>

package="com.how2j**a.service"/>

掃瞄包com.how2j**a.aspect和com.how2j**a.service,定位業務類和切面類

找到被註解了的切面類,進行切面配置

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

xmlns:xsi="" xmlns:aop=""xmlns:context=""xsi:schemalocation="

/spring-beans.xsd

/spring-aop.xsd

/spring-context.xsd">

測試執行

在how2j **學習spring框架時,發現有網友留了一些問題,這裡我們拿出來分享一下

1. 為什麼用註解方式跑程式比用xml配置要慢?

xml檔案的形式,系統只需要解析xml檔案中的內容,你需要自己去管理xml檔案。而註解最終要呼叫反射,反射很耗時間的,換來的是不需要去管理xml檔案,二者各有優缺點,看情況選擇合適的方式。

2. 假如乙個業務有兩個切面如何區分先後順序?(比較重要

使用xml配置的時候,在定義切面時,如果通知的型別相同,可以加上order定義多個切面的執行順序,這裡有兩種情況:

order="1">

before pointcut-ref="loggercutpoint" method="log"/>

order="2">

before pointcut-ref="loggercutpoint" method="log"/>

上面的通知型別都是before,order的數值越小越先執行!!!

order="1">

after pointcut-ref="loggercutpoint" method="log"/>

order="2">

after pointcut-ref="loggercutpoint" method="log"/>

上面的通知型別都是after,order的數值越大越先執行!!!

在定義切面時,如果通知的型別不同,則無論怎樣定義order都無法決定多個切面的執行順序

order="1">

after pointcut-ref="loggercutpoint" method="log"/>

order="2"> 

before pointcut-ref="loggercutpoint" method="log"/>

這種情況切面的執行順序是按通知的型別決定的!!!

用註解的方式定義切面,執行的先後順序其原理和xml配置一樣。

3. 如何把乙個切面織入兩個不同的業務類中?

可在切面中加入

@around(value = "execution(* com.j**a.productservice.*(..)) || execution(* com.j**a.service.productservice2.*(..))")
如果分開寫,會報錯,例如

@around(value = "execution(* com.j**a.productservice.*(..))"@around(value = "execution(* com.j**a.productservice2.*(..))"

Spring學習 註解 四)

一 屬性依賴注入 依賴注入方式 手動裝配 和 自動裝配 手動裝配 一般進行配置資訊都採用手動 基於xml裝配 構造方法,setter方法 基於註解裝配 自動裝配 struts和spring整合可以自動裝配 bytype 按型別裝配 byname 按名稱裝配 constructor 構造裝配 anto...

Spring框架註解的學習

1.restcontroller 相當於 controller responsebody 4.0重要的乙個新的改進是 restcontroller註解,它繼承自 controller註解。4.0之前的版本,spring mvc的元件都使用 controller來標識當前類是乙個控制器servlet。...

spring學習 二 註解方式

告訴spring用註解方式配置 product類的category屬性新增註解 註解方式一 autowired private category category 註解方式二 resource name c private category category 與之前相同 全部刪除,只新加一行即可,瀏...