使用aop需要在网上下载两个jar包:

  1. aopalliance.jar
  2. aspectjweaver.jar

为idea添加jar包,快捷键ctrl+shift+alt+s,打开添加jar包的对话框,将刚才下载好的jar添加进去

前置增强实例

编写TimeHandler.java

 package com.example.spring;

 public class TimeHandler {
public void beforTime()
{
System.out.println("前置增强:CurrentTime = " + System.currentTimeMillis());
}
}

编写HelloWorld.java

 package com.example.spring;

 public class HelloWorld {
public void printHello(){
System.out.println("Hello 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <!-- bean definition & AOP specific configuration -->
<!-- 1 配置对象-->
<bean id="helloWorld" class="com.example.spring.HelloWorld"/>
<bean id="timeHandler" class="com.example.spring.TimeHandler"/> <!-- 2 配置aop操作-->
<aop:config>
<!-- 2.1 配置切入点-->
<!-- 设置切入点id为pointcut1 -->
<aop:pointcut id="pointcut1" expression="execution(* com.example.spring.HelloWorld.*(..))"/> <!-- 2.2 配置切面-->
<aop:aspect ref="timeHandler">
<!-- 配置前置增强类型 ,method:增强类()里面的方法(beforTime())作为前置-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<aop:before method="beforTime" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
</beans>

编写Application.java

 package com.example.spring;

 import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Application {
public static void main(String[] args) {
//bean配置文件所在位置 D:\\IdeaProjects\\spring\\src\\Beans.xml
//使用AbstractApplicationContext容器
AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\\IdeaProjects\\spring\\src\\aop.xml");
//得到配置创建的对象
HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
helloWorld.printHello();
}
}

运行输出

前置增强:CurrentTime = 1510134673408
Hello Aop.

可以看到,打印Hello Aop.之前会先打印当前的时间CurrentTime = 1510132664923。

后置增强实例

修改TimeHandler.java

 package com.example.spring;

 import org.aspectj.lang.ProceedingJoinPoint;

 public class TimeHandler {
public void beforTime()
{
System.out.println("前置增强:CurrentTime = " + System.currentTimeMillis());
} public void afterTime()
{
System.out.println("后置增强:CurrentTime = " + System.currentTimeMillis());
}
}

修改配置文件aop.xml

 <?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <!-- bean definition & AOP specific configuration -->
<!-- 1 配置对象-->
<bean id="helloWorld" class="com.example.spring.HelloWorld"/>
<bean id="timeHandler" class="com.example.spring.TimeHandler"/> <!-- 2 配置aop操作-->
<aop:config>
<!-- 2.1 配置切入点-->
<!-- 设置切入点id为pointcut1 -->
<aop:pointcut id="pointcut1" expression="execution(* com.example.spring.HelloWorld.*(..))"/> <!-- 2.2 配置切面-->
<aop:aspect ref="timeHandler">
<!-- 配置前置增强类型 method:增强类()里面的方法(beforTime())作为前置-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<!--<aop:before method="beforTime" pointcut-ref="pointcut1"/>--> <!-- 配置后置增强类型 method:增强类()里面的方法(afterTime())作为后置-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<aop:after method="afterTime" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
</beans>

运行输出

Hello Aop.
后置增强:CurrentTime = 1510134850754

环绕增强实例

修改TimeHandler.java

 package com.example.spring;

 import org.aspectj.lang.ProceedingJoinPoint;

 public class TimeHandler {
public void beforTime()
{
System.out.println("前置增强:CurrentTime = " + System.currentTimeMillis());
} public void afterTime()
{
System.out.println("后置增强:CurrentTime = " + System.currentTimeMillis());
} public void aroundTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
//方法之前
System.out.println("环绕增强:CurrentTime = " + System.currentTimeMillis()); //执行被增强的方法
proceedingJoinPoint.proceed(); //方法之后
System.out.println("环绕增强:CurrentTime = " + System.currentTimeMillis());
} }

修改aop.xml

 <?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <!-- bean definition & AOP specific configuration -->
<!-- 1 配置对象-->
<bean id="helloWorld" class="com.example.spring.HelloWorld"/>
<bean id="timeHandler" class="com.example.spring.TimeHandler"/> <!-- 2 配置aop操作-->
<aop:config>
<!-- 2.1 配置切入点-->
<!-- 设置切入点id为pointcut1 -->
<aop:pointcut id="pointcut1" expression="execution(* com.example.spring.HelloWorld.*(..))"/> <!-- 2.2 配置切面-->
<aop:aspect ref="timeHandler">
<!-- 配置前置增强类型 method:增强类()里面的方法(beforTime())作为前置通知-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<!--<aop:before method="beforTime" pointcut-ref="pointcut1"/>--> <!-- 配置后置增强类型 method:增强类()里面的方法(afterTime())作为后置通知-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<!--<aop:after method="afterTime" pointcut-ref="pointcut1"/>--> <!-- 配置环绕增强类型 method:增强类()里面的方法(aroundTime())作为环绕通知-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<aop:around method="aroundTime" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
</beans>

运行输出

环绕增强:CurrentTime = 1510135559066
Hello Aop.
环绕增强:CurrentTime = 1510135559074

之后就不用修改源程序,只需通过调整配置文件,就可以调整程序的逻辑。

修改配置文件

 <?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <!-- bean definition & AOP specific configuration -->
<!-- 1 配置对象-->
<bean id="helloWorld" class="com.example.spring.HelloWorld"/>
<bean id="timeHandler" class="com.example.spring.TimeHandler"/> <!-- 2 配置aop操作-->
<aop:config>
<!-- 2.1 配置切入点-->
<!-- 设置切入点id为pointcut1 -->
<aop:pointcut id="pointcut1" expression="execution(* com.example.spring.HelloWorld.*(..))"/> <!-- 2.2 配置切面-->
<aop:aspect ref="timeHandler">
<!-- 配置前置增强类型 method:增强类()里面的方法(beforTime())作为前置通知-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<aop:before method="beforTime" pointcut-ref="pointcut1"/> <!-- 配置后置增强类型 method:增强类()里面的方法(afterTime())作为后置通知-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<aop:after method="afterTime" pointcut-ref="pointcut1"/> <!-- 配置环绕增强类型 method:增强类()里面的方法(aroundTime())作为环绕通知-->
<!-- pointcut-ref设置为切入点的id:pointcut1 -->
<aop:around method="aroundTime" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
</beans>

运行输出

前置增强:CurrentTime = 1510190036105
环绕增强:CurrentTime = 1510190036105
Hello Aop.
环绕增强:CurrentTime = 1510190036122
后置增强:CurrentTime = 1510190036122

Java框架spring 学习笔记(十二):aop实例操作的更多相关文章

  1. Java框架spring 学习笔记(二):Bean的作用域

    Spring 框架Bean支持以下五个作用域: 下面介绍两种作用域,singleton和protoype singleton作用域 singleton作用域为默认作用域,在同一个ioc容器内getBe ...

  2. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  3. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  4. Java框架spring 学习笔记(十):bean管理(注解和配置文件混合使用)

    配置文件和注解混合使用 创建对象操作使用配置文件方式实现 注入属性的操作使用注解方式实现 编写BookDao.java和OrderDao.java文件 BookDao.java package com ...

  5. Spring学习记录(十二)---AOP理解和基于注解配置

    Spring核心之二:AOP(Aspect Oriented Programming) --- 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软 ...

  6. Java框架spring 学习笔记(七):Spring相关概念

    Spring是开源.轻量级.一站式框架. Spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码实现. ioc:控制反转,把对象的创建交给Spring进行配置,比如一个类,在类里面有 ...

  7. Spring学习笔记IOC与AOP实例

    Spring框架核心由两部分组成: 第一部分是反向控制(IOC),也叫依赖注入(DI); 控制反转(依赖注入)的主要内容是指:只描述程序中对象的被创建方式但不显示的创建对象.在以XML语言描述的配置文 ...

  8. Java框架spring 学习笔记(十六):c3p0连接池的配置以及dao使用jdbcTemplate

    连接池可以大大提高数据库的性能和连接速度,将那些已连接的数据库连接存放在一个连接池里,以后别人要连接数据库的时候,将不会重新建立数据库连接,直接从连接池中取出可用的连接,用户使用完毕后,会释放连接重新 ...

  9. Java框架spring 学习笔记(十九):事务管理(注解管理)

    注解管理的方式要比xml配置方式要简单很多 只需在配置文件中添加事务注解 <?xml version="1.0" encoding="UTF-8"?> ...

随机推荐

  1. sort简单用法

    -u 去重## 查看文件内容cat test_sort.txt ## sort -u 去重cat test_sort.txt |sort -u----------------------------- ...

  2. 嵌入式V3s交叉编译 tslib和QT4.8.7,并使用Qt Creator编译项目

    本文主参考:http://zero.lichee.pro/%E5%BA%94%E7%94%A8/QT_index.html 环境 Ubuntu16 64位 arm-linux-gnueabihf ve ...

  3. Windows硬链接 软链接 符号链接 快捷方式

    http://blog.nsfocus.net/shortcuthard-linkjunction-pointsymbolic-link/ Windows支持4种”链接”机制,分别是shortcut. ...

  4. gerrit中mysql配置

    gerrit数据库使用mysql 进入gerrit数据库 mysql -ugerrit -p -h127.0.0.1 -P3307 密码为用户名加pass mysql> select * fro ...

  5. E3Upload项目总结

    项目需求:读取阿里云数据库数据,通过webservice接口上传给第三方. 概要设计,项目满足以下几点: 1.动态接口调用 2.给多平台上传 3.数据保持(减轻数据库压力) 4.上传任务管理 5.扩展 ...

  6. no module named win32api

    1 首先下载pywin32 https://sourceforge.net/projects/pywin32/files/pywin32/ 2进入虚拟环境 D:\env\jdscrapy\Lib\si ...

  7. 算法——001BitMap(位图)算法

    哈希表在查找定位操作上具有O(1)的常量时间,常用于做性能优化,但是内存毕竟是有限的,当数据量太大时用哈希表就会内存溢出了.而考虑对这些大数据进行存盘分批处理又有IO上的开销,性能又不能满足要求.这个 ...

  8. 转载:揪出MySQL磁盘消耗迅猛的真凶

    揪出MySQL磁盘消耗迅猛的真凶 背景 Part1:写在最前 当一张单表10亿数据量的表放在你面前,你将面临着什么? Part2:背景介绍 为了提升数据库资源利用率,一个实例中,在不互相影响,保证业务 ...

  9. 60秒的快速巡检Linux服务器性能

    uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP, ...

  10. C语言编程漫谈——main函数

    写在前面 促使我写这篇文章是因为我这几天找了几个一样是大三的同学,与我相同专业相同方向(物联网)的人,除了@小胡同的诗,基本没有什么其他人会现在看起来很简单的编程题目了.问了一下其他同学,他们大部分都 ...