javaEE之------ApectJ的切面技术===标签
如今比較流行了aop技术之中的一个========标签
实现步骤:
一,导入aop标签
方法,打开aop包。里面就有。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">这个里面就有
然后依据选择spring的版本号。
在配置文件里配置
例如以下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
这样就导入了aop标签
二,配置切点和通知
<aop:config>
<aop:aspect ref="myadvior"><!-- 须要导入作为切面的类-->
<aop:pointcut expression="execution(* cn..Person.*(..))" id="cut"/>
<aop:before method="test1" pointcut-ref="cut"/> <!-- 这是通知,拦截切点位置。也就是拦截时 须要做的事情 -->
<aop:aftermethod="test1" pointcut-ref="cut"/> <!-- 拦截核心之后运行的动作,所有写在test1方法里面了 -->
<!-- <aop:before method="test1" pointcut="execution(* cn..Person.*(..))"/> 这样也是能够的,就不用切点了,直接写在这里面 -->
</aop:aspect>
</aop:config>
里面的配置通知类型非常多
三。被代理类以及自己主动注解类
<span style="font-size:18px;"><!-- 须要的三元素 (被代理类, 自己主动代理类,切面)採用标签。切面和之前的有点不同。仅仅是一个简单的pojo导入 -->
<bean id="person" class="cn.aop.aspectj3.Person"></bean></span>
<span style="font-size:18px;"> <!-- 注解自己主动标签,自己主动去查找带有注解的类和方法 -->
<span style="white-space:pre"> </span> <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</span>
四。导入我们作为切面的类
<bean class="cn.aop.aspectj3.MyAdvisor" id="myadvior"/><!--当做切面的pojo 注入 -->
配置文件已经完毕。
五,被导入的作为切面的类
public class MyAdvisor { public void test1(){
System.out.println("这是test...");
}
}
非常普通的一类。方法名在配置切面里面,通知的时间也完毕了。。这里就能够实现想要完毕的动作了。
标签相当于之前的,有非常大的优化,如在核心模块全然不知道是都做了拦截,进一步实现了解耦。
=========================这里已经介绍完====================
源码以及測试
1,配置文件
<? xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!-- 须要的三元素 (被代理类。 自己主动代理类,切面)採用标签,切面和之前的有点不同,仅仅是一个简单的pojo导入 -->
<bean id="person" class="cn.aop.aspectj3.Person"></bean> <!-- 自己主动代理注解
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"></bean>
-->
<!-- 注解自己主动标签,自己主动去查找带有注解的类和方法 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy> <aop:config>
<aop:aspect ref="myadvior">
<aop:pointcut expression="execution(* cn..Person.*(..))" id="cut"/>
<aop:before method="test1" pointcut-ref="cut"/> <!-- 这是通知,拦截切点位置。也就是拦截时 须要做的事情 -->
<aop:aftermethod="test1" pointcut-ref="cut"/> <!-- 拦截核心之后运行的动作。所有写在test1方法里面了 -->
<!-- <aop:before method="test1" pointcut="execution(* cn..Person.*(..))"/> 这样也是能够的。就不用切点了,直接写在这里面 -->
</aop:aspect>
</aop:config> <bean class="cn.aop.aspectj3.MyAdvisor" id="myadvior"/><!--当做切面的pojo 注入 -->
</beans>
2, 作为切面的类
package cn.aop.aspectj3; public class MyAdvisor { public void test1(){
System.out.println("这是test...");
}
}
3,被代理的对象
package cn.aop.aspectj3; public class Person { public void say(){
System.out.println("...这是say..");
} public void run(){
System.out.println("这是person中的 run方法");
} }
4,測试
@Test
public void Test2(){
ApplicationContext context =new ClassPathXmlApplicationContext("cn/aop/aspectj3/aspectj3.xml");
Person p =context.getBean(Person.class);
p.run();
p.say();
}
javaEE之------ApectJ的切面技术===标签的更多相关文章
- [转载]JavaEE学习篇之——JQuery技术详解
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/32102187 1.简介2.工具3.jQuery对象 1.DOM对象转化成j ...
- [JavaEE] 深入理解Struts2的ognl标签
OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够 ...
- java的JSP技术
java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...
- 面向切面编程AOP
本文的主要内容(AOP): 1.AOP面向切面编程的相关概念(思想.原理.相关术语) 2.AOP编程底层实现机制(动态代理机制:JDK代理.Cglib代理) 3.Spring的传统AOP编程的案例(计 ...
- Servlet,jsp,JSP技术 ,JSP编程
一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 ...
- 12、Jsp加强/自定义标签/JavaBean
1 Jsp加强回顾 Jsp加强 1)Jsp的9大内置对象 request HttpServletRequet response HttpServletResponse config ...
- JSP技术基础(动态网页基础)
前言:如果说html为静态网页基础,那么jsp就是动态网页基础,两者的区别就是jsp在html的前面多加了几行而已.当然,jsp里面对java的支持度更高.要明白,js只是嵌入在客户端的小程序小脚本而 ...
- 学习日常笔记<day14>自定义标签
1自定义标签 1.1第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 /** * 标签处理器类 * @author APPle * 1)继 ...
- javaEE之------Spring-----》 AspectJ注解
前面介绍了下Spring中的切面技术.如今说下採用注解的方式进行切面 首先肯定和之前的一样.须要一个自己主动代理的注解类 AnnotationAwareAspectJAutoProxyCreator ...
随机推荐
- CentOS7.6 修改密码
一.重启系统,在开机过程中,按下键盘上的e,进入编辑模式 三.将光标一直移动到 LANG=en_US.UTF-8 后面,空格,再追加init=/bin/sh.这里特别注意,需要写在UTF-8后,保 ...
- 使用阿里云RDS
1)购买 注意内网免费 外网收费 内网需要跟服务器ECS在同一VPC下 即ECS买在华东1 RDS也必须在华东1 2)使用 配置白名单 全部通过设置为0.0.0.0/0 (不建议) 创建账户 创建数 ...
- JavaScript设计模式基础之面向对象的JavaScript(二)
多态 多态的实际含义:同一操作作用与不同的对象上面,可以产生不同的解释和不同的执行结果,就是说,给不同的对象发送同一个消息 的时候,这些对象会根据这个消息分别给出不同的反馈 代码如下: class D ...
- SMTP error 554 !!
哇,我真的amazing, incredible!! 我只是想写一个简单的邮件,结果他一直报554错误!!! 期间,通过百度,我发现了可能导致 此,讨厌至极的错误,有N多原因: 但我的原因 谜之离谱! ...
- 【牛客练习赛 25】A 因数个数和
题目地址:https://www.nowcoder.com/acm/contest/158/A 参考博客:https://blog.csdn.net/zzcblogs/article/details/ ...
- 转: 使用 /sys 文件系统访问 Linux 内核
转一个挺不错的文章 使用 /sys 文件系统访问 Linux 内核 https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/ 如果你正在开发的设备 ...
- oracle如何重做日志组
1.查询数据库中的重做日志组 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STA ...
- python_正则_re模块
正则表达式元字符: 字符匹配 : . :除换行符以外的任意单个字符 [] :指定范围内字符 [^] :指定范围外字符 次数匹配: * :任意次,0,1,多次 .* :任意字符 任意次 ? :至多1次或 ...
- LeetCode(31) Next Permutation
题目 Implement next permutation, which rearranges numbers into the lexicographically next greater perm ...
- Sql按照字段分组,选取其他字段最值所在的行记录
引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...