spring --(21)基於xml方式配置aop

接口express

public interface Calculator {
	
	int add(int i,int j);
	int sub(int i,int j);
	int div(int i,int j);
}

接口實現app

public class CalculatorImpl implements Calculator{

	@Override
	public int add(int i, int j) {
		int result = i+j;
		return result;
	}

	@Override
	public int sub(int i, int j) {
		int result = i-j;
		return result;
	}

	@Override
	public int div(int i, int j) {
		int result = i/j;
		return result;
	}
	
}

日誌切面ide

public class LoggingAspect {
	
	//環繞通知
	public Object Around(ProceedingJoinPoint proceedingJoinPoint){
		
		Object result = null;
		String methodName = proceedingJoinPoint.getSignature().getName();
		try {
			//前置通知
			System.out.println("The method"+methodName+"begin with:"+Arrays.asList(proceedingJoinPoint.getArgs()));
			result = proceedingJoinPoint.proceed();
			//返回通知
			System.out.println("The method" + methodName + "end with:"+result);
		} catch (Throwable e) {
			//異常通知
			System.out.println("The method" + methodName + "occurs exception:"+e);	
		}
		//後置通知
		System.out.println("The method" + methodName + "end ");
		return result;
	}
}

驗證切面日誌

public class Validation {
	
	public void validateArgs(JoinPoint joinPoint) {
		System.out.println("validate:"+Arrays.asList(joinPoint.getArgs()));
	}
}

main方法code

public class Main {
	
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		Calculator calculator = (Calculator) ctx.getBean("calculator");
		int result = calculator.add(1, 2);
		System.out.println(result);
	}
}

xml配置文件(重點)xml

<!-- 配置bean -->
		<bean id="calculator" class="com.test.aop.impl.CalculatorImpl"></bean>
		
		<!-- 配置切面的bean -->
		<bean id="loggingAspect" class="com.test.aop.impl.LoggingAspect"></bean>
		<bean id="validation" class="com.test.aop.impl.Validation"></bean>
		
		<!-- 配置AOP -->
		<aop:config>
			<!-- 配置切點表達式 -->
			<aop:pointcut expression="execution(* com.test.aop.impl.Calculator.*(int,int))" id="pointcut"/>
			<!-- 配置切面及通知 -->
			<aop:aspect ref="loggingAspect" order="2">
				<aop:around method="Around" pointcut-ref="pointcut"/>
			</aop:aspect>
			<aop:aspect ref="validation" order="1">
				<aop:before method="validateArgs" pointcut-ref="pointcut"/>
			</aop:aspect>
		</aop:config>
相關文章
相關標籤/搜索