1. 程式人生 > >Spring入門第十九課

Spring入門第十九課

obj hiera -s exec 獲取 out ide 後置 exe

後置通知

看代碼:

package logan.study.aop.impl;

public interface ArithmeticCalculator {
    
    int add(int i, int j);
    int sub(int i, int j);
    int mul(int i, int j);
    int div(int i, int j);
    

}
package logan.study.aop.impl;

import org.springframework.stereotype.Component;

@Component
public
class ArithmeticCalculatorImpl implements ArithmeticCalculator { @Override public int add(int i, int j) { // TODO Auto-generated method stub int result = i + j; return result; } @Override public int sub(int i, int j) { // TODO Auto-generated method stub
int result = i - j; return result; } @Override public int mul(int i, int j) { // TODO Auto-generated method stub int result = i * j; return result; } @Override public int div(int i, int j) { // TODO Auto-generated method stub int
result = i / j; return result; } }
package logan.study.aop.impl;

import java.util.Arrays;
import java.util.List;

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

//把這個類聲明為一個切面:需要把該類放入到IOC容器中,在聲明為一個切面
@Aspect
@Component
public class LoggingAspect {
    //聲明該方法時一個前置通知:在目標方法開始之前執行
    @Before("execution(public int logan.study.aop.impl.ArithmeticCalculator.*(int, int))")
    public void beforeMethod(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        List<Object> args = Arrays.asList(joinPoint.getArgs());
        System.out.println("The method "+ methodName +" begins with "+args);
    }
    
    //後置通知,在目標方法執行之後執行(無論該方法是否出現異常)
    //在後置通知中,還不能訪問目標方法執行的結果,執行結果在返回通知中可以訪問
    @After("execution(public int logan.study.aop.impl.ArithmeticCalculator.*(int, int))")
    public void afterMethod(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        List<Object> args = Arrays.asList(joinPoint.getArgs());
        System.out.println("The method "+ methodName +" ends with "+args);
    }

}
<?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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">

    <context:component-scan base-package="logan.study.aop.impl"></context:component-scan>
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    

</beans>
package logan.study.aop.impl;

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

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //1.創建Spring的IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.從IOC容器裏面獲取bean實例
        ArithmeticCalculator arithmeticCalculator = ctx.getBean(ArithmeticCalculator.class);
        //使用Bean
        int result = arithmeticCalculator.add(3, 6);
        System.out.println(result);
        
        result = arithmeticCalculator.div(3, 6);
        System.out.println(result);

    }

}

輸出結果:

五月 27, 2017 5:46:24 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContex[email protected]: startup date [Sat May 27 17:46:24 CST 2017]; root of context hierarchy
五月 27, 2017 5:46:24 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
The method add begins with [3, 6]
The method add ends with [3, 6]
9
The method div begins with [3, 6]
The method div ends with [3, 6]
0

Spring入門第十九課