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>
相关文章
相关标签/搜索