前面介绍了下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注解的更多相关文章

  1. SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP

    AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...

  2. SSM-Spring-17:Spring中aspectJ注解版

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言,定义了AOP 语法,能够在编译期提供 ...

  3. Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...

  4. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

  5. spring AOP 之二:@AspectJ注解的3种配置

    @AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...

  6. Spring使用AspectJ注解和XML配置实现AOP

    本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...

  7. JAVA 常用注解( JDK, Spring, AspectJ )

    JDK自带注解   @Override   表示当前方法覆盖了父类的方法   @Deprecation   表示方法已经过时,方法上有横线,使用时会有警告   @SuppviseWarnings    ...

  8. Spring学习(十八)----- Spring AOP+AspectJ注解实例

    我们将向你展示如何将AspectJ注解集成到Spring AOP框架.在这个Spring AOP+ AspectJ 示例中,让您轻松实现拦截方法. 常见AspectJ的注解: @Before – 方法 ...

  9. Spring学习--用 ASpectJ 注解实现 AOP

    用 AspectJ 注解声明切面: 要在 Spring 中声明 AspectJ 切面 , 只需要在 IOC 容器中将切面声明为 bean 实例.当在 Spring IOC 容器中初始化 AsjectJ ...

随机推荐

  1. centeros安装jdk

    准备工作: java se下载网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  2. word/excel/ppt 2 PDF

    PHP 实现 word/excel/ppt 转换为 PDF 一般最常见的就是利用OpenOffice来转换,来看看实现的核心代码: class PDFConverter { private $com; ...

  3. next.js、nuxt.js等服务端渲染框架构建的项目部署到服务器,并用PM2守护程序

    前端渲染:vue.react等单页面项目应该这样子部署到服务器 貌似从前几年,前后端分离逐渐就开始流行起来,把一些渲染计算的工作抛向前端以便减轻服务端的压力,但为啥现在又开始流行在服务端渲染了呢?如v ...

  4. 一:1.1 python程序与数据储存【进制转换】

    二进制 :0 1 [逢二进一]0+0=00+1=11+1=1011+1=100 1 1+ 1------ 100 八进制: 0 1 2 3 4 5 6 7 [逢八进一] 1+7=101+2=3 十进制 ...

  5. 【Codeforces Round #422 (Div. 2) A】I'm bored with life

    [题目链接]:http://codeforces.com/contest/822/problem/A [题意] 让你求a!和b!的gcd min(a,b)<=12 [题解] 哪个小就输出那个数的 ...

  6. [Python] Pandas load DataFrames

    Create an empty Data frame with date index: import pandas as pd def test_run(): start_date='2017-11- ...

  7. JavaScript语言基础3

     JavaScript能够处理一些来自于现实世界的数据类型.比如:数字和文本. 同一时候JavaScript中也包括了一些具 有抽象性质的数据类型.比如对象数据类型. JavaScript它是一种弱类 ...

  8. Sqlite 命令行导出、导入数据(直接支持CSV)

    打开命令行 导出数据到data.csv D:\project>sqlite3.exe old.db SQLite version 3.21.0 2017-10-24 18:55:49 Enter ...

  9. android 客户端 Cookie处理

    Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). Cookie最早是网景公司的前雇员Lou Montul ...

  10. NET Native

    起因源自于微软在 MSDN 博客上宣布了 .NET Native 的开发者预览版..NET Native 可以将 C# 代码编译成本地机器码.有了它,开发者将不仅能享受 C# 的高生产力,而且能拥有 ...