首先,使用注解实现AOP是基于AspectJ方式的。

创建包含切点方法的类

package cn.ganlixin.test;

import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; @Component
public class Demo {
@Pointcut("execution(* cn.ganlixin.test.Demo.demo1())")
public void demo1() {
System.out.println("Demo.demo1()");
} @Pointcut("execution(* cn.ganlixin.test.Demo.demo2())")
public void demo2() {
System.out.println("Demo.demo2()");
}
}

  使用@Component注解,相当于创建一个<bean />标签,id就是类名的首字母小写。

  使用@Pointcut注解来声明切点方法。

创建通知类

package cn.ganlixin.advisor;

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.springframework.stereotype.Component; @Component
@Aspect
public class MyAdvisor {
@Before("cn.ganlixin.test.Demo.demo1()")
public void myBefore() {
System.out.println("前置");
} @After("cn.ganlixin.test.Demo.demo1()")
public void myAfter() {
System.out.println("后置");
} @Around("cn.ganlixin.test.Demo.demo1()")
public Object myAround(ProceedingJoinPoint p) throws Throwable {
System.out.println("环绕前置");
Object result = p.proceed();
System.out.println("环绕后置");
return result;
} @AfterThrowing("cn.ganlixin.test.Demo.demo2()")
public void myThrow() {
System.out.println("异常通知");
} @AfterReturning("cn.ganlixin.test.Demo.demo2()")
public void myAfterReturning() {
System.out.println("after Returning");
}
}

  首先需要使用@Component来创建<bean />

  然后使用@Aspect注解来标记这是一个使用AspectJ方式的AOP通知类

  分别使用@Before,@After,@Around,@AfterThrowing,@AfterReturning来标记该方法绑定AOP中的哪一个部分。

  注意在通知类中方法上的注解,在指定方法名称(切点)时,一定要与切点方法类中声明的切点名称相同,否则会报错。

修改配置文件

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 指定哪些包下有注解 -->
<context:component-scan base-package="cn.ganlixin.test,cn.ganlixin.advisor">
</context:component-scan> <!-- 开启cglib代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy> </beans>

  需要注意的是:

  1、基于注解的方式,需要使用xmlns:context命名空间以及xsd文件。

  2、Spring不会主动去解析注解,因为他不知道哪些地方有注解,所以需要使用<context:component-scan base-package=" ">来指定哪些包下面有注解,Spring才会去指定的package中扫描注解。

  3、还需要开启cglib代理,即设置<aop:aspectj-autoproxy proxy-target-class="true" />

测试

package cn.ganlixin.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml"); Demo d = ac.getBean("demo", Demo.class);
d.demo1();
}
}

  

Spring 使用AOP——基于注解配置的更多相关文章

  1. Spring(七)之基于注解配置

    基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...

  2. Spring之AOP的注解配置

    配置过程可以简单的分为3步: 1,业务类配置 在业务类前加入,将业务类交由Spring管理 @Component("s") 这个表示,这个业务类的Bean名字为 s . 2,将切点 ...

  3. spring的aop的注解配置

    一.使用注解的方式配置后置通知 第一步,创建通知类LogAdvice 第二步,要在spring主配置文件中声明以注解的方式配置spring aop  第三步,测试 二.其他异常配置 package c ...

  4. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

  5. [刘阳Java]_Spring AOP基于XML配置介绍_第9讲

    基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...

  6. 使用 Spring 2.5 基于注解驱动的 Spring MVC

    http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/ 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sp ...

  7. 使用 Spring 2.5 基于注解驱动的 Spring MVC--转

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  8. [10] AOP的注解配置

    1.关于配置文件 首先在因为要使用到扫描功能,所以xml的头文件中除了引入bean和aop之外,还要引入context才行: <?xml version="1.0" enco ...

  9. Spring 中aop切面注解实现

    spring中aop的注解实现方式简单实例   上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们 ...

随机推荐

  1. 总结Linux下的软件安装

    安装软件的最佳实践 虽然我们知道Linux下安装软件有三种方式,分别是源代码安装,rpm包安装和yum安装,但是从可控性和结合自己目前的水平来说,优先选择以下两种方式安装程序. 1,使用rpm包安装 ...

  2. Spring中BeanFactory的对象注册与依赖绑定方式

    概念 BeanFactory是spring的基础类型IOC容器,提供完整的IOC服务支持 默认采用延迟初始化策略,当客户端对象访问受管对象时,才对其进行初始化和依赖注入 理解 BeanFactory将 ...

  3. 一个可以自动生成css样式的插件happycss

    一直在页面写css, 重复写着样式,发现布局中,特别是h5,大量的样式都是margin,padding,width,height, 而,当我们需要给一个标签写样式的时候,避免内联样式,我们又需要取cl ...

  4. select2 下拉无法显示

    .select2-container--open{ z-index: 99999;}

  5. 文件类型解析漏洞防御与攻击(PHP)

    简介: 解析漏洞主要是一些特殊文件被iis.Apache.Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞,一般的思路都是用图片木马来欺骗服务器,上传webshell,达到提权的目 ...

  6. Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录

    本人微信公众号:微软动态CRM专家罗勇 ,回复298或者20190120可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 系统 ...

  7. arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  8. offic|集成|协同OA|移动办公|

    随着互联网时代的日新月异,移动通讯技术的飞速发展,移动网络技术的更新换代,手机.平板电脑等移动设备越来越智能化.越来越多样化,人们对移动办公的需求也在日益增长.在此背景下北京博信施科技有限公司自主研发 ...

  9. iOS---------显示和隐藏状态栏的网络活动标志

    //在向服务端发送请求状态栏显示网络活动标志: [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; ...

  10. as无法关联git

    转载请标明出处:https://www.cnblogs.com/tangZH/p/10060573.html 从gitlab上面把项目拉下来之后,用as打开,发现as无法关联git,没有git相关的菜 ...