AOP之XML

  1. 導入aop的jar包
    java

  2. 編寫實現類以及切面方法spring

  3. 配置XML文件express

  4. 編寫測試主函數
    app

    實例:ide

  5. public class ArithmeticCalculatorImpl implements ArithmeticCalculator {
    
    	@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 mul(int i, int j) {
    		int result = i * j;
    		return result;
    	}
    
    	@Override
    	public int div(int i, int j) {
    		int result = i / j;
    		return result;
    	}
    
    }
  6. <!-- 配置 bean -->
    	<bean id="arithmeticCalculator" 
    		class="com.atguigu.spring.aop.xml.ArithmeticCalculatorImpl"></bean>
    
    	<!-- 配置切面的 bean. -->
    	<bean id="loggingAspect"
    		class="com.atguigu.spring.aop.xml.LoggingAspect"></bean>
    
    	<bean id="vlidationAspect"
    		class="com.atguigu.spring.aop.xml.VlidationAspect"></bean>
    
    	<!-- 配置 AOP -->
    	<aop:config>
    		<!-- 配置切點表達式 -->
    		<aop:pointcut expression="execution(* com.atguigu.spring.aop.xml.ArithmeticCalculator.*(int, int))" 
    			id="pointcut"/>
    		<!-- 配置切面及通知 -->
    		<aop:aspect ref="loggingAspect" order="2">
    			<aop:before method="beforeMethod" pointcut-ref="pointcut"/>
    			<aop:after method="afterMethod" pointcut-ref="pointcut"/>
    			<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="e"/>
    			<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/>
    			<!--  
    			<aop:around method="aroundMethod" pointcut-ref="pointcut"/>
    			-->
    		</aop:aspect>	
    		<aop:aspect ref="vlidationAspect" order="1">
    			<aop:before method="validateArgs" pointcut-ref="pointcut"/>
    		</aop:aspect>
    	</aop:config>
  7. public class LoggingAspect {
    	
    	public void beforeMethod(JoinPoint joinPoint){
    		String methodName = joinPoint.getSignature().getName();
    		Object [] args = joinPoint.getArgs();
    		
    		System.out.println("The method " + methodName + " begins with " + Arrays.asList(args));
    	}
    	
    	public void afterMethod(JoinPoint joinPoint){
    		String methodName = joinPoint.getSignature().getName();
    		System.out.println("The method " + methodName + " ends");
    	}
    	
    	public void afterReturning(JoinPoint joinPoint, Object result){
    		String methodName = joinPoint.getSignature().getName();
    		System.out.println("The method " + methodName + " ends with " + result);
    	}
    	
    	public void afterThrowing(JoinPoint joinPoint, Exception e){
    		String methodName = joinPoint.getSignature().getName();
    		System.out.println("The method " + methodName + " occurs excetion:" + e);
    	}
    	
    	@Around("execution(public int com.atguigu.spring.aop.ArithmeticCalculator.*(..))")
    	public Object aroundMethod(ProceedingJoinPoint pjd){
    		
    		Object result = null;
    		String methodName = pjd.getSignature().getName();
    		
    		try {
    			//前置通知
    			System.out.println("The method " + methodName + " begins with " + Arrays.asList(pjd.getArgs()));
    			//執行目標方法
    			result = pjd.proceed();
    			//返回通知
    			System.out.println("The method " + methodName + " ends with " + result);
    		} catch (Throwable e) {
    			//異常通知
    			System.out.println("The method " + methodName + " occurs exception:" + e);
    			throw new RuntimeException(e);
    		}
    		//後置通知
    		System.out.println("The method " + methodName + " ends");
    		
    		return result;
    	}
    }
  8. public class Main {
    	
    	public static void main(String[] args) {
    		
    		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-xml.xml");
    		ArithmeticCalculator arithmeticCalculator = (ArithmeticCalculator) ctx.getBean("arithmeticCalculator");
    		
    		System.out.println(arithmeticCalculator.getClass().getName());
    		
    		int result = arithmeticCalculator.add(1, 2);
    		System.out.println("result:" + result);
    		
    		result = arithmeticCalculator.div(1000, 0);
    		System.out.println("result:" + result);
    	}
    	
    }
相關文章
相關標籤/搜索