java之Spring(AOP)-Annotation實現添加切面


我們已經知道之前的切面添加方式(動態代理),是定義了一個實現了InvocationHandler接口的Handlerservice類,然后

在這個類內部寫好切面邏輯,包括切面放置的位置,很顯然下面的這個切面邏輯是放置在原先方法之前的。

public class Handlerservice implements InvocationHandler {
    private UserDao o;
    public Handlerservice(UserDao o) {
        super();
        this.o = o;
    }
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        // TODO Auto-generated method stub
        System.out.println("-----我來組成頭部-----");
        Object returnValue = method.invoke(o, args);
        return returnValue;
    }
}

如果需求改變,又要來更改代碼,可謂相當不方便。不過還好有強大的Spring,先看看Spring是怎樣使用寥寥幾個注解解

決了這種問題的吧。

@Aspect
@Component public class Aop1 {
    @Before("execution(* com.eco.daoimp.*.add*(..))")
    public void show() {
        System.out.println("-----Annotation添加切面Aop-----");
    }
}

首先@Aspect注解,自從AOP設計模式出現之后,可謂是掀起了java界的一股熱潮,當然少不了大家對其的研究,其中最

牛B的當屬Aspect,甚至一度出現了Aspect聯盟,可見大家對其的追捧程度。所以,這么好的東西Spring自然也會為止着迷,

於是在Spring也引入了Aspect!

然后@Component注解,因為這個類要被Spring容器所使用,自然要用這個注解定義其是Spring的一個組件。

最后這個@Before注解以及注解括弧內容,意思就是,在daoimp包下面的所有類的add開頭的方法調用之前先來調用我下面

的這個方法,@Before("execution(方法返回值類型   包名.類名.方法名(參數類型))"),既然有@Before,自然還有

@After等等~~~

如此一來,就實現了定義一個切面,並且聲明其放置的位置(add*方法之前)。是不是很方便。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM