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

Spring AOP 註解驅動開發完整實戰指南

     編輯:Java 相關知識

依賴庫準備

  • aspectjweaver-1.6.8.jar:提供 @Aspect、@Before 等註解
  • spring-aop-3.0.4.RELEASE.jar:提供 AnnotationAwareAspectJAutoProxyCreator 自動代理
  • aopalliance-1.0.jar:定義攔截器契約

Spring 容器配置

<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="https://www.springframework.org/schema/aop"
       xsi:schemaLocation="...
         https://www.springframework.org/schema/aop
         https://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

  <!-- 啟用 @AspectJ 自動代理 -->
  <aop:aspectj-autoproxy/>

  <!-- 目標 Bean -->
  <bean id="userManager" class="com.service.Impl.UserManagerImpl"/>

  <!-- 切面 Bean -->
  <bean class="com.util.SecurityHandler"/>
</beans>

業務介面與實作

public interface UserManager {
    void add(User user);
}

public class UserManagerImpl implements UserManager {
    private static final Log log = LogFactory.getLog(UserManagerImpl.class);
    public void add(User user) {
        log.debug("add User: " + user.getUsername());
    }
}

切面類別實作

@Aspect
public class SecurityHandler {
    @Before("execution(* add*(..))")
    private void checkSecurity() {
        System.out.println("添加前檢查通過");
    }

    @After("execution(* add*(..))")
    private void checkResult() {
        System.out.println("添加後檢查通過");
    }
}

測試驗證

public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserManager um = (UserManager) ctx.getBean("userManager");
    User u = new User(); u.setUsername("aaa"); u.setPassword("bbb");
    um.add(u);
}

輸出結果

添加前檢查通過
2011-03-11 16:13:21,562 [main] DEBUG [com.service.Impl.UserManagerImpl] - add User:aaa
添加後檢查通過

常見坑點

缺少 spring-aop.jar 導致找不到 spring-aop-3.0.xsd,引發 XmlBeanDefinitionStoreException。確保 classpath 包含對應版本的 spring-aop 模組。

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