天天看點

【Spring Aop】 練習:注解實作簡單Aop通知操作

要求

  • 利用注解的形式簡單實作Aop的通知操作

業務類

package com.zyx.core.aop.anno;

public class Examing {
  // 業務内部的方法
  public void testing(){
    System.out.println("-----考試進行中-----");
  }

}      

增強類 — 切面

package com.zyx.core.aop.anno;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class Processing {

  // 抽取公共切點
  @Pointcut(value="execution(* com.zyx.core.aop.anno.Examing.*(..))")
  private void all() {}
  
  // 通過Before通知注解實作
  @Before(value = "all()")
  public void Before1() {
    System.out.println("-----緊張地複習中-----");
  }
  
  // 通過After通知注解實作
  @After(value="all()")
  public void After1() {
    System.out.println("-----刺激地閱卷中-----");
  }
}      

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx.xsd
    ">
    <!-- 啟用注解  -->
    <context:annotation-config/>
    <!-- 啟用元件掃描,排除@Controller元件 -->
    <context:component-scan base-package="com.zyx.core.aop.anno"></context:component-scan>
    <!--  開啟AspectJ生成代理對象 ===> 隻要類上面添加了AspectJ注解的,就會自動生成代理對象  -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    
    <bean id="exam" class="com.zyx.core.aop.anno.Examing"></bean>

</beans>      

測試類

package com.zyx.core.aop.anno;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
        // 1.配置xml檔案路徑
    String xmlPath = "classpath:spring/ApplicationContextAopAnno.xml";
    ApplicationContext context = new ClassPathXmlApplicationContext(xmlPath);
    // 2.執行個體化對象
    Examing exam = (Examing) context.getBean("exam");
    // 3.調取業務方法
        exam.testing();
  }
}      

結果