系统学习Spring之Spring in action(八)

每日一叨:

    又到星期四啦,心情不错,继续努力的积累知识点咯.

文章导读:

     1.面向切面编程之注解篇

 

知识点:

 

1.面向切面编程之注解篇

  前面学习了如何用XML配置去使用SpringAOP,为了减少XML的配置,Spring还支持了AOP的注解功能.这几个注解就不多介绍了,很容易理解.

  通过事例来学习如何使用注解实现SpringAOP:

public class DrinkCoffee{
    //正在喝咖啡就是这个做例子吧
    public void drink(){
        System.out.println("咖啡真好喝." );
    }
}
@Aspect
public class Coffee {
    @Pointcut("execution(* com.ricky.zero.pojo.DrinkCoffee.drink(..))")
    public void marker(){
    }
    @Before(value = "marker()")
    public void beforeDrinkCoffee(){
        System.out.println("首先把水烧开,把咖啡粉倒入杯中,倒入适量的白开水,然后用勺子搅拌.");
    }
    
    //喝咖啡之后
    @AfterReturning(value = "marker()")
    public void afterDrinkCoffee(){
        System.out.println("咖啡太好喝了,好想在喝一杯...");
    }
    
    @AfterThrowing(value = "marker()")
    //水放少了,咖啡有点苦.
    public void somethingIsWrong(){
        System.out.println("一不小心把水放多了,味道比较淡,口感欠佳.");
    }
    
    @After(value = "marker()")
    //喝完咖啡要记得洗杯子哦.
    public void washCup(){
        System.out.println("喝完咖啡后洗杯子.");
    }
    
    //把所有步骤都放到一个方法里
    public void allInOne(ProceedingJoinPoint p){
        try {
            System.out.println("首先把水烧开,把咖啡粉倒入杯中,倒入适量的白开水,然后用勺子搅拌.");
            p.proceed();
            System.out.println("咖啡太好喝了,好想在喝一杯...");
        } catch (Throwable e) {
            // TODO Auto-generated catch block
            System.out.println("一不小心把水放多了,味道比较淡,口感欠佳.");
        }finally{
            System.out.println("喝完咖啡后洗杯子.");
        }
    }
}

XML配置文件:

    <bean id="coffee" class="com.ricky.zero.pojo.Coffee"></bean>
    <bean id="drinkCoffee" class="com.ricky.zero.pojo.DrinkCoffee"></bean>

运行测试,并得到结果如下:

首先把水烧开,把咖啡粉倒入杯中,倒入适量的白开水,然后用勺子搅拌.
咖啡真好喝.
喝完咖啡后洗杯子.
咖啡太好喝了,好想在喝一杯...

上面的事例中,最难懂的应该是marker()方法,marker方法是一个空方法,它的作用就是相当于一个标记的作用,可以把注解绑定到的这个标记上.

上面的事例是与XML配置实现的SpringAOP对应的.

这个是与XML配置实现的SpringAOP对应的第二个事例:

修改Coffee类:

@Aspect
public class Coffee {
    @Pointcut("execution(* com.ricky.zero.pojo.DrinkCoffee.drink(..))")
    public void marker(){
    }
    @Around(value = "marker()")
    //把所有步骤都放到一个方法里
    public void allInOne(ProceedingJoinPoint p){
        try {
            System.out.println("首先把水烧开,把咖啡粉倒入杯中,倒入适量的白开水,然后用勺子搅拌.");
            p.proceed();
            System.out.println("咖啡太好喝了,好想在喝一杯...");
        } catch (Throwable e) {
            // TODO Auto-generated catch block
            System.out.println("一不小心把水放多了,味道比较淡,口感欠佳.");
        }finally{
            System.out.println("喝完咖啡后洗杯子.");
        }
    }
}

运行并得到测试结果:

首先把水烧开,把咖啡粉倒入杯中,倒入适量的白开水,然后用勺子搅拌.
咖啡真好喝.
咖啡太好喝了,好想在喝一杯...
喝完咖啡后洗杯子.

 

 

SpringDI和SpringAOP到这里就结束了.关于Spring其它的知识,后天在来更新吧,,明天晚上可以轻松一下,打几局DOTA咯.

--------------------------------申明----------------------------       

                  本文可以免费阅读以及转载,转载时请注明出处.      

                  本人邮箱:Ricky_LS@163.com

                  Thank you for your corporation.

 

posted @ 2013-03-28 21:21  养家糊口  阅读(284)  评论(0编辑  收藏  举报