您的位置:首页 > 编程语言 > ASP

我的第一个@aspect注入Aop的例子(aop实现所需要的jar包)

2017-02-20 23:55 246 查看
Aspectj允许使用Annotation用于定义切面,切入点和增强处理.即通过注解@Aspect将一个普通的java类变为一个切面bean然后对另外一个@component组件java类进行增强处理

要使用注解Aspectj,就要对他进环境配置(xml schema的xml命名空间的uri配置,jar包的安装)

1.环境配置.

1.1使用xml schema配置

  对于xml命名空间(即:xmlnamespace.简写:xmlns:xsi部分添加一对aop schema文件)

                            http://www.springframework.org/schema/aop
                            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

 如果你没有配置上述的xmlns 的uri那么会抛出下面这个"通配符的匹配很全面,但无法找到元素....."的错误,如下图(解决方案就是添加上面的xmlns)





注意的是xmlns:xsi  是以一对uri引用出现的(必须的是以一对的形式写,即一个为空间名和一个模式的文档的物理位置,不然抛出上面图片显示的错误),另外,xmlnamespace的众多的uri之间必须空一格

                            http://www.springframework.org/schema/aop       空间名

                            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   模式的文档物理空间


模式的文档的物理位置:我们可以在spring-aop.xxx.jar包里的meta-inf文件里找到特殊的spring.handlers和spring.schemas这两个文件,他们是储存namespace的uri地址,spring为了在断网的条件下依旧可以找到这些文件就把他们放在这两个文件中了,另外旧版本的spring中的namespace的uri地址也很贴心地给了出来,为了是防止spring旧版本的uri更新的域名后,对spring xmsns:xsi的造成影响.

2.jar包  

jar包需求,在寻常的spring的jar包下添加以下

三个jar包:

aop alliance-xx.jar:

aspectsweaver-xxx.jar :这个jar包是添加@Aspect注解

spring-aop-xxx.jar

网上有种说法是四种(为了保险起见,我把它也贴出来)

在上面三种的基础上,再加:spring-aspects-xxx.jar

注:xxx是版本的意思

好了,我的所有jar包如下,一般情况有了下面这些jar包  aop运行还是没有问题的.



添加了jar包环境搭配好了,我们开始我们的第一个@aspect例子

1.创建两个类,一个普通类(bean组件类同时也是主调bean),一个是Aspect类服务普通
4000
类(其实也是一个普通java类)

package test;

import org.springframework.stereotype.Component;

@Component  //该注解表明该类是一个普通的bean类,但是没有任何迹象表明他将会被谁服务

public class one {

    public void sayHello() {

        System.out.println("hello Aject!");

    }

    public static void main(String[] args) {

        one o=new one();

        o.sayHello();

    }

}

package test;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

@Aspect         //定义了一个切面(切面的意思是:业务流程运行的某个特定步骤,也就是应用运行过程的关注点 ,关注点可能横切多个对象,所以也常常被称为横切关注点)

public class two {

    @Around("execution(void one.sayHello())")//还@Around是一个增强处理,其外增强处理还有before和after

    public void test()

    {

        System.out.println("模拟执行权限检查");

    }

}

2.写上测试类

public class test {

    public static void main(String[] args) {

        ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");

        one o=ac.getBean(one.class);

        o.sayHello();

    }

}

最后输出结果



问题1:这里之所以不输出hello Ajectj!!! 是因为我引用了 @around注解

Advice(增强处理):@before  在输出主语句输出之前,输出增强语句

                               @after     在输出主语句输出之后,输出增强语句

                               @around   上面的例子显示

问题2:当使用运行类使用system.out.print的时候,增强处理才发挥作用,若是没有采用system.out.print而是使用return 的语句时,增强处理也不会被激发

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: