javaEE之------Spring-----》 AspectJ注解
前面介绍了下Spring中的切面技术。如今说下採用注解的方式进行切面
首先肯定和之前的一样。须要一个自己主动代理的注解类 AnnotationAwareAspectJAutoProxyCreator
配置文件里的代码:
<?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"> <bean id="person" class="cn.aop.aspectj2.Person"></bean>
<!-- 自己主动代理注解 <span style="font-family: Arial, Helvetica, sans-serif;">自己主动去查找带有注解的类和方法,和之前的那个自己主动代理类差点儿相同,原理大概是遍历全部的带注解的类,然后进行一一解析。。</span>
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"></bean>
-->
<!-- 注解自己主动标签,自己主动去查找带有注解的类和方法 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- 注解的切面 须要自己写的切面了===切点+ 通知 在该类中相对之前,比較简单些-->
<bean class="cn.aop.aspectj2.MyAdvisor"></bean> </beans>
在配置文件里,我们不难发现,最基本都是 一个被代理的对象。自己主动代理类,切面(能够是自己写的类,这个注解就是自己写的,当然在之前的那个就是用aop里面的)。我们须要写一个自己的切面类
切面类
package cn.aop.aspectj2; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut; @Aspect
public class MyAdvisor {
private final String CUT="execution(* cn.aop.aspectj2.*.*(..))"; /*
* 在核心代码之前运行
*/
@Before(CUT)
public void advice(){
System.out.println("单独之前拦拦");
} /*
* 在核心代码之后运行,正常退出或者异常都会调用这个
*/
@After(CUT)
public void advice2(){
System.out.println("单独之后拦拦");
} /*
* around通知最好不用(能够用before+after来取代),由于參数依赖---但也有优点。
* 就是获得被拦截对象和对应方法的信息
*/
@Around(CUT)
public void around(ProceedingJoinPoint p) throws Throwable{
System.out.println("这是围绕前 "+p.getKind()+","+p.getTarget());
p.proceed();
System.out.println("围绕后");
} /*
* 是针对某一个函数
* 在前面函数运行完毕之后,这个才会运行,
* 可是方法中当出现异常之后,这个就不会运行的,正常退出才会运行
*/
@AfterReturning(CUT)
public void afterR(JoinPoint jp ){
System.out.println("全部之后"+jp.getKind());
} @AfterReturning(CUT)
public void after2(){
System.out.println("全部之后222");
} /*
* 这个在出现异常之后调用。前提是==------前面的代码没有抓住这个异常,
* 前面抓异常之后。这里是不会调用的,一般在日志里面用的比較多。
*
*/
@AfterThrowing(CUT)
public void throwex() throws Exception{
System.out.println("出异常了");
} }
person类
package cn.aop.aspectj2;
public class Person {
public void say(){
// Integer.parseInt("aa");//測试是否出异常
System.out.println("...这是say..");
}
public void run(){
System.out.println("这是person中的 run方法");
}
}
測试类
public class Demo2 {
@Test
public void test(){//相同的从容器中拿到配置文件,取出对象
ApplicationContext app = new ClassPathXmlApplicationContext("cn/aop/aspectj2/aspectj2.xml");
Person p=app.getBean(Person.class);
p.run();
p.say();
}
}
javaEE之------Spring-----》 AspectJ注解的更多相关文章
- SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP
AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...
- SSM-Spring-17:Spring中aspectJ注解版
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言,定义了AOP 语法,能够在编译期提供 ...
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较
本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...
- spring AOP 之二:@AspectJ注解的3种配置
@AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...
- Spring使用AspectJ注解和XML配置实现AOP
本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...
- JAVA 常用注解( JDK, Spring, AspectJ )
JDK自带注解 @Override 表示当前方法覆盖了父类的方法 @Deprecation 表示方法已经过时,方法上有横线,使用时会有警告 @SuppviseWarnings ...
- Spring学习(十八)----- Spring AOP+AspectJ注解实例
我们将向你展示如何将AspectJ注解集成到Spring AOP框架.在这个Spring AOP+ AspectJ 示例中,让您轻松实现拦截方法. 常见AspectJ的注解: @Before – 方法 ...
- Spring学习--用 ASpectJ 注解实现 AOP
用 AspectJ 注解声明切面: 要在 Spring 中声明 AspectJ 切面 , 只需要在 IOC 容器中将切面声明为 bean 实例.当在 Spring IOC 容器中初始化 AsjectJ ...
随机推荐
- Could not create connection to database server. Attempted reconnect 3 times. Giving up.错误
项目是基于springboot框架,昨天从git上pull代码之后也没有具体看更改的地方,结果运行的时候就报错了. java.sql.SQLNonTransientConnectionExceptio ...
- BNUOJ 4049 四叉树
四叉树 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Ma ...
- windows server 打开 FTP 服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。
解决方案1: 打开高级安全windows防火墙,设置出入站规则. 然后,再打开windows防火墙界面,点击左上角“允许程序或功能通过windows防火墙”,勾选上设置的出入站名称和FTP服务器. 如 ...
- 统计 MapReduce 输出路径修改。
先在上一篇MR 的104 行加入代码.jobConf.setOutputFormat(MyMultipleFilesTextOutputFormat.class); 用意是自定义 job 的输出格式: ...
- JAVA爬虫Nutch、WebCollector的正则约束
爬虫爬取时,须要约束爬取的范围. 基本全部的爬虫都是通过正則表達式来完毕这个约束. 最简单的,正则: http://www.xinhuanet.com/.* 代表"http://www.xi ...
- 关于HttpClient模拟浏览器请求的參数乱码问题解决方式
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44407297 http://www.llwjy.com/blogdetail/9 ...
- PowerShell中和服务相关的命令
New-Service https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-s ...
- VS 2015支持C语言和C++程序
先要安装C++的相关支持控件! 然后就可以使用VS编写C++或者C程序了. 默认支持的是C++,将后缀名改为C就是支持C了. 学习数据结构算法之类的,就可以通过VS来学习了. 安装 新建C++项目 C ...
- 2.CString转换到char*
多字节模式下: CString -->char * CString str1 ="; char *t1 =str1.GetBuffer(str1.GetLength()); str1. ...
- Python(一) 基本类型
前言: 什么是代码? 代码是现实世界事物在计算机世界中的映射. 什么事写代码? 写代码是将现实世界中的事物用计算机语言来描述. 一.数字:整形与浮点型 整型:int 浮点型:float (没有单精度和 ...