首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring AOP 實戰精講(十):基於註解的配置與 Maven 專案完整結構

     編輯:Java 綜合教學

Spring AOP 實戰精講(十):基於註解的配置與 Maven 專案完整結構

延續上篇 XML 配置,本文展示基於 @AspectJ 註解的 AOP 配置方式,並給出完整 Maven 依賴管理、項目結構與核心代碼,適合偏好註解風格的團隊。

Maven 依賴管理(pom.xml 關鍵片段)

<properties>
    <spring-framework.version>3.2.3.RELEASE</spring-framework.version>
    <aspectj.version>1.6.6</aspectj.version> <!-- 必須與 Spring 版本兼容 -->
    <java.version>1.7</java.version>
</properties>

<dependencies>
    <!-- Spring 核心 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring-framework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring-framework.version}</version>
    </dependency>

    <!-- AspectJ 織入器 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${aspectj.version}</version>
    </dependency>

    <!-- 日誌與測試 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.13</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>

極簡 Spring 配置(applicationContext.xml)

<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:context="https://www.springframework.org/schema/context"
       xmlns:aop="https://www.springframework.org/schema/aop"
       xsi:schemaLocation="...省略...">

    <!-- 掃描切面與目標 Bean -->
    <context:component-scan base-package="com.lee.spring003.aop.annotation"/>

    <!-- 自動創建代理(核心開關) -->
    <aop:aspectj-autoproxy/>

</beans>

僅需兩行:組件掃描 + <aop:aspectj-autoproxy/> 啟用 @AspectJ 自動代理。

核心代碼實現

目標接口與實現

public interface ITeacherDAO {
    String saveTeacher();
}

@Repository("teacherDAO")
public class TeacherDAOImpl implements ITeacherDAO {
    @Override
    public String saveTeacher() {
        System.out.println("TeacherDAOImpl - saveTeacher()");
        return "save successfully";
    }
}

切面類:Transaction(純註解風格)

@Component("transaction")
@Aspect
public class Transaction {

    @Pointcut("execution(* com.lee.spring003.aop.annotation.TeacherDAOImpl.*(..))")
    public void beginTransactionPointCut() {} // 方法簽名即切點標識

    @Before("beginTransactionPointCut()")
    public void beginTransaction() {
        System.out.println("Begin transaction...");
    }

    @AfterReturning("beginTransactionPointCut()")
    public void commit() {
        System.out.println("Transaction commit...");
    }

    // 可擴展:@After、@AfterThrowing、@Around
}

註解 vs XML 配置選型建議

維度XML 配置註解配置
集中管理✓ 所有切面集中在 XML,易審計✗ 分散在各切面類中
重構友好✗ 重命名方法/包需同步修改 XML✓ IDE 重構自動同步切點表達式
可讀性✓ 配置與業務分離✓ 切面邏輯自包含
靈活性✓ 部署時可替換切面不動代碼✗ 需重新編譯
團隊建議大型項目、多團隊協作、需運行時動態調整中小項目、敏捷迭代、開發自運維

源碼倉庫

完整 Maven 專案(含 XML 與註解雙版本):
https://github.com/leechenxiang/maven-spring002-aop

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved