spring使用註解版

目錄

列:spring 註解版計算器

計算器接口Calc.java

接口實現

切面MyAspect

bean.xml

測試


列:spring 註解版計算器

計算器接口Calc.java

/**
 * 計算器
 * @author 51361
 *
 */
public interface Calc {
       public int add(int x,int y);
       public int div(int x,int y);
       public void mul(int x,int y);//乘
}

接口實現

/**
 * 接口實現類
 * @author 51361
 *
 */
/*
 * @Component(value="calc") :實例化對象 calc爲對象名
 */
@Component(value="calc")
public class CalcImpl implements Calc {

	public int add(int x, int y) {
		// TODO Auto-generated method stub
		System.out.println("add");
		return x+y;
	}

	public int div(int x, int y) {
		// TODO Auto-generated method stub
		System.out.println("div");
		return x/y;
	}

	public void mul(int x, int y) {
		// TODO Auto-generated method stub
		System.out.println("mul===="+(x*y));
	}
}

切面MyAspect

@Aspect
@Component(value="calcProxy")
public class MyAspect {
	
	//@Before(value="addMethod()")   :切入點
	 @Before(value="addMethod()")
	 public void check(){
   	   System.out.println("切面---檢查權限 ---前置通知");
     }
    
	// @After(value="addMethod()")        後置通知
	 @After(value="addMethod()")
	 public void check1(){
   	  System.out.println("寫入日誌---後置通知");
     }
    
	 /*
	  * @AfterReturning(value="addMethod()",returning="reValue")
	  * @AfterReturning 後置通知
	  * returning="reValue返回值
	  */
	@AfterReturning(value="addMethod()",returning="reValue")
	 public void check3(Object reValue){
	   	  System.out.println("後置通知--返回值:"+reValue);
	     }
	 
	 @AfterThrowing(value="addMethod()",throwing="ex")//異常通知
     public void writeLog(Exception ex){
   	  System.out.println("異常通知־"+ex.getMessage());
     }

	 
	@Around(value="addMethod()")
	 public Object check(ProceedingJoinPoint pjp) throws Throwable{
	   	  System.out.println("--環繞通知前--");
	    	Object obj=pjp.proceed();   //執行目標方法
	    	System.out.println("--環繞通知處理結果ojb::"+obj);
	   	  System.out.println("--環繞通知後");
	   	  return obj;//返回目標方法
	  }
	
	// @Pointcut("execution(* com.iotek.CalcImpl.*(..))") 切面表達式
     @Pointcut("execution(* com.iotek.CalcImpl.*(..))")
     public void addMethod(){}
}

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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">
   <!-- 1 添加註解命名空間   xmlns:context="http://www.springframework.org/schema/context"
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context.xsd -->  
    
    <!-- 2 掃描指定包下所有組件 -->    
    <context:component-scan base-package="com.iotek"></context:component-scan>
    
    <!--3 開啓aop動態代理 -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  
</beans>

測試

public class SpringTest {
    @Test 
	public void test1(){
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		Calc calc=(Calc)context.getBean("calc");
		calc.mul(10, 20);
	}
    
    @Test 
   	public void test2(){
   		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
   		Calc calc=(Calc)context.getBean("calc");
   		int rs=calc.add(20, 30);
   		System.out.println("rs=="+rs);
   	}
    /**
     * 測試異常通知
     */
    @Test 
   	public void test3(){
   		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
   		Calc calc=(Calc)context.getBean("calc");
   		  calc.div(10, 0);
   	}
    /**
     * 環繞通知
     */
    @Test 
   	public void test4(){
   		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
   		Calc calc=(Calc)context.getBean("calc");
   		 int rs= calc.add(10, 29);
   		 System.out.println("rs==="+rs);
   	}
}

結果:

test3結果
環繞通知:test4結果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章