Spring 使用AOP——基于注解配置
首先,使用注解实现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——基于注解配置的更多相关文章
- Spring(七)之基于注解配置
基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...
- Spring之AOP的注解配置
配置过程可以简单的分为3步: 1,业务类配置 在业务类前加入,将业务类交由Spring管理 @Component("s") 这个表示,这个业务类的Bean名字为 s . 2,将切点 ...
- spring的aop的注解配置
一.使用注解的方式配置后置通知 第一步,创建通知类LogAdvice 第二步,要在spring主配置文件中声明以注解的方式配置spring aop 第三步,测试 二.其他异常配置 package c ...
- Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用
Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...
- [刘阳Java]_Spring AOP基于XML配置介绍_第9讲
基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...
- 使用 Spring 2.5 基于注解驱动的 Spring MVC
http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/ 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sp ...
- 使用 Spring 2.5 基于注解驱动的 Spring MVC--转
概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...
- [10] AOP的注解配置
1.关于配置文件 首先在因为要使用到扫描功能,所以xml的头文件中除了引入bean和aop之外,还要引入context才行: <?xml version="1.0" enco ...
- Spring 中aop切面注解实现
spring中aop的注解实现方式简单实例 上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们 ...
随机推荐
- Linux-Kconfig总结与分析
使用Kconfig时,需要注意的地方 1.在Kconfig中定义的配置宏,前缀都没有"CONFIG_",只有编译内核时,自动生成autoconf.h才会出现前缀. 2.如果XX_d ...
- JAVA_内部类
内部类 什么是内部类? 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类 成员内部类:定义在类中方法外的类 定义格式示例: public class Tesdt { publ ...
- vue中的路由的跳转的参数
vue中的路由跳转传参 params 与 query this.$router.push({ name:"detail", params:{ name:'nameValue', c ...
- Nginx基础知识
1.nginx正向代理.反向代理 正向代理: 在如今的网络环境下,如果由于技术需要要去访问国外的某些网站,此时会发现位于国外的某网站通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问, ...
- 从.Net到Java学习第四篇——spring boot+redis
从.Net到Java学习系列目录 “学习java已经十天,有时也怀念当初.net的经典,让这语言将你我相连,怀念你......”接上一篇,本篇使用到的框架redis.FastJSON. 环境准备 安装 ...
- jupyter notebook安装、登录
pip install jupyter 提示pip需要升级(本人装的是anaconda) 输入:python -m pip install --upgrade pip 安装完成. 运行jupyter ...
- jQuery省市区三级联动菜单
<style> select{ padding:5px 0; } .outer{ width:500px; margin:20px auto; } </style> <d ...
- Linux 环境下 Git 安装与基本配置
索引: 目录索引 参看代码 GitHub: git.txt 一.Linux (DeepinOS) 环境 1.安装 sudo apt-get update sudo apt-get install gi ...
- 取消导航栏navigationBar的半透明/毛玻璃效果
iOS 7.0以上的系统,导航栏默认有毛玻璃效果,遮住了颜色 原因是7.0以上的系统,导航栏默认有毛玻璃效果,遮住了颜色,取消掉这个效果就行了. if( ([[[UIDevice currentDev ...
- 浪潮服务器I4008/NX5480M4介绍
浪潮I4008 / NX5480M4是一款高密度模块化服务器. I4008是机箱,NX5480M4是节点. 8个计算节点模块可以部署在标准机架4U高度机器里,具有高性能.低功耗.易维护.组管理功能.适 ...