spring切面编程
xml配置实现
先写三个类
public String amethod(String s) {
System.out.println("This is AAAAAAAAAAAAAAAA");
return "This is A return :"+s;
}
public class B {
public void bmethod() {
System.out.println("This is BBBBBBBBBBBBBBBBBBBBB ");
}
}
//这个类实现了spring里的接口,在配置文件中配置advisor的bean
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("This is method:"+method.getName());
for (Object arg : args) {
System.out.println("This is args:"+arg.toString());
}
System.out.println("This is target:"+target);
}
}
spring配置文件内容
<bean id="b" class="com.hehe.aop.B" />
<aop:config>
<aop:pointcut id="p" expression="execution(* com.hehe.aop.A.*(..))" />
<aop:advisor advice-ref="c" pointcut-ref="p" />
<aop:aspect ref="b">
<!-- 切点可以写表达式,也可以引用定义好的,下面两种效果一样 -->
<!-- <aop:before method="bmethod" pointcut="execution(* com.hehe.aop.A.*(..))" /> -->
<aop:before method="bmethod" pointcut-ref="p" />
</aop:aspect>
</aop:config>
写个执行方法
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-aop.xml");
A a = (A) context.getBean("a");
a.amethod("Hello world");
}
执行结果:
This is BBBBBBBBBBBBBBBBBBBBB //切点类之前执行
This is AAAAAAAAAAAAAAAA //切点类
This is returnValue:This is A return :Hello world //下面语句是切点类之后执行结果
This is method:amethod
This is args:Hello world
This is target:com.hehe.aop.A@7fa98a66
注解实现
先写俩类
public class A {
public String amethod(String s) {
System.out.println("This is AAAAAAAAAAAAAAAA");
return "This is A return :"+s;
}
} @Component
@Aspect
public class D { @AfterReturning(value = "execution(* com.hehe.aop.A.*(..))",returning="returnValue")
public void dmethod(JoinPoint j,Object returnValue) {
System.out.println(returnValue.toString());
String name = j.getSignature().getName();
System.out.println(name);
}
} //好几个joinpoint,用这个:import org.aspectj.lang.JoinPoint;
配置文件
<context:component-scan base-package="com.hehe.aop" />
<aop:aspectj-autoproxy/>//这个必须要有,没有还不报错。
<bean id="a" class="com.hehe.aop.A" />
测试类
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-aop.xml");
A a = (A) context.getBean("a");
a.amethod("Hello world");
}
}
测试结果
This is AAAAAAAAAAAAAAAA
This is A return :Hello world
amethod
spring切面编程的更多相关文章
- spring切面编程AOP 范例一
参照网上的spring AOP编程实例进行配置,但是碰到了几个坑.这篇文章重点讲解一下我踩过的两个坑: 1.使用@Service自动装配的时候,基础扫描包配置要正确: 2.xml中切面配置中的exec ...
- Spring切面编程步骤
什么是面向切面编程 面向对象的编程主要注重核心业务,而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能,比如一个完整的系统中,记录平时系统运行时抛出的异常,需要我们去记录,以便我们对系统尽 ...
- Spring切面编程实践【原创】
定义 什么叫Spring面向切面编程(AOP),请自行百度,这边就不做详细介绍了. 场景 有两个对象,字典和工程信息Bean,每次新增或修改对象时,记录新增和修改的时间. 基类定义 package m ...
- spring aop使用,spring aop注解,Spring切面编程
================================ ©Copyright 蕃薯耀 2020-01-21 https://www.cnblogs.com/fanshuyao/ 一.第一步, ...
- Spring切面编程AOP
- Spring切面编程Aspect之@Before和@Around用法
查看dao层使用的sql import java.util.Arrays; import org.apache.commons.lang.ArrayUtils; import org.aspectj. ...
- spring aop 切面编程中获取具体方法的方法
spring 切面编程中获取具体方法的方法 工作中,使用环绕通知,用来捕获异常,然后通过获取方法的返回值,返回不同的数据给到调用方. 由于方法的返回值不同,我们处理异常时,也需要返回不同的格式. 这时 ...
- spring入门(四)【面向切面编程】
开发过程中很多时候会用到日志.事务等操作,这些操作如果要写在业务代码中会相当麻烦,这时就会用到面向切面编程(AOP),AOP作为一种编程思想,和OOP有着不同的侧重点,面向对象侧重于万事万物皆对象,而 ...
- Spring面向切面编程(AOP)
1 spring容器中bean特性 Spring容器的javabean对象默认是单例的. 通过在xml文件中,配置可以使用某些对象为多列. Spring容器中的javabean对象默认是立即加载(立即 ...
随机推荐
- 标定设备自动化-ASAP3
欢迎关注<汽车软件技术>公众号,回复关键字获取资料. 1.ASAP3定义 下图选自INCA文档<INCA_IF_ASAM-ASAP3_EN.pdf>说明了ASAP3的用途:标定 ...
- 如何为开发项目编写规范的README文件
前言 了解一个项目,首先都是通过其Readme文件了解信息.如果你以为Readme文件都是随便写写的那你就错了.github,oschina git gitcafe的代码托管平台上的项目的Readme ...
- redhat7.6 AIDE 系统文件完整性检查工具
1.安装AIDE yum install aide 安装完的配置文件,在/etc/aide.conf 自定义/etc/aide.conf 下面我写了对 /data/data1 目录做CONTE ...
- Windows 安装python虚拟环境
windows 安装pytho虚拟环境 方法一:virtualenv (1)使用pip安装virtualenv工具 pip install virtualenv (2)使用virtualenv创建虚拟 ...
- Spring中解决循环依赖报错的问题
什么是循环依赖 当一个ClassA依赖于ClassB,然后ClassB又反过来依赖ClassA,这就形成了一个循环依赖: ClassA -> ClassB -> ClassA 原创声明 本 ...
- Hibernate框架:org.hibernate.exception.SQLGrammarException: Cannot open connection at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java92)
报错信息 org.hibernate.exception.SQLGrammarException: Cannot open connection at org.hibernate.exception. ...
- LeetCode困难题(一)
题目一: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 ...
- Electromagnetic
1. 电磁辐射 2. 电磁频谱 3. 可见光 4. 微波 5. 更多相关链接 1. 电磁辐射 https://en.wikipedia.org/wiki/Electromagnetic_radiati ...
- Linux centosVMware NFS exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp
一.exportfs命令 常用选项 -a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 以下操作在服务端上 vim /etc/exports //增加 /tmp/ 1 ...
- kafka控制测试发送接收消息
kafaka,生产者:./kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic 消费者:./kafka-co ...