• 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*方法之前)。是不是很方便。

  • 相关阅读:
    对于bilibili主页head部分的代码的总结以及疑问。
    小项目使用框架(B/S),简单实现mvc分离
    petshop4学习_重构DataList实现分页
    照书抄了个小的sniffer。不过有问题测试不能通过,请求各位帮帮我
    《灵魂的迷茫》
    vs2005中gridview的RowCommand事件
    快速得到google的Gmail(已申请的免看)
    命令行下重启/启动停止IIS服务器的命令
    ES6之const命令
    不容忽视的js面试题
  • 原文地址:https://www.cnblogs.com/eco-just/p/7863060.html
Copyright © 2020-2023  润新知