Spring学习之旅(五)极速创建Spring AOP java工程项目
编译工具:eclipse。
简单说一下,Spring AOP是干嘛的?
假设你创建了一群类:类A,类B,类C,类D。。。。
现在你想为每个类都增加一个新功能,那么该怎么办呢?是不是想到了为每个类增加相同的新代码。这未免也Boring了吧。不过不用担心,Spring AOP就是来帮组你脱离这种单调乏味无聊愚蠢的工作的。
例子:创建类A,执行类A的方法。添加类A方法执行前后的时间显示。
1)新建Java工程项目
假设工程名为:spring_aop_hello
2)导入AOP所需jar包

注意,其中aspectjrt.jar和aspectjweaver.jar并不包含在Spring框架相关包里面。
需另外下载(附下载地址:http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.8.13.jar)
另,下载后需解压,相关详细操作请看博客(http://blog.csdn.net/u012453843/article/details/52347208)
3)在src目录下创建Spring配置文件,并在配置文件中引入AOP命名空间(相关版本的命名空间可在官网查询)
本例相关代码稍后在本篇贴出。
4)编写业务逻辑所涉及的有关类完成原始业务需求。
创建类A:
package com.edu.aop.hello;
public class A {
private String a1;
private String a2;
public void methodA1(){
System.out.println("A类的方法1被执行");
}
public void methodA2(){
System.out.println("A类的方法2被执行");
}
public A(){}
public A(String a1,String a2){
this.a1=a1;
this.a2=a2;
}
//省略相关setter/getter方法
}
配置文件aop_hello.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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置bean -->
<bean id="a" class="com.edu.aop.hello.A"></bean> </beans>
测试主方法:
package com.edu.aop.hello; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) {
//创建IoC容器
@SuppressWarnings("resource")
ApplicationContext ctx=new ClassPathXmlApplicationContext("aop_hello.xml");
//从容器中取出对象
A a=(A)ctx.getBean("a");
//引用对象,按业务逻辑要求依次执行有关的方法
a.methodA1();
a.methodA2(); } }
运行结果:

以上为原始业务逻辑,下面涉及AOP。
5)采用“AOP编程”完成新添业务需求
创建切片类X:
package com.edu.aop.hello; import java.text.SimpleDateFormat;
import java.util.Calendar; import org.aspectj.lang.JoinPoint; public class X { //连接点对象做参考,利用该参数,获取目标对象的方法
public void methodX1(JoinPoint joinPoint){
String methodName=joinPoint.getSignature().getName();//获取方法名
System.out.println("我是前置通知,在A类方法:"+methodName+"()运行前被切入");
//获取当前系统时间,并转换为yyyy年MM月dd日 HH:mm:ss格式,并显示
Calendar startTimeNow=Calendar.getInstance();
SimpleDateFormat fmt=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String startTime=fmt.format(startTimeNow.getTime());
System.out.println("A类方法:"+methodName+"(),运行时间:"+startTime);
} //连接点对象做参数,利用该参数,获取目标对象的方法
public void methodX2(JoinPoint joinPoint){
String methodName=joinPoint.getSignature().getName();//获取方法名
System.out.println("我是后置通知,在A类方法:"+methodName+"()运行后切入");
//获取当前系统时间,并转换为yyyy年MM月dd日 HH:mm:ss格式,并显示
Calendar endTimeNow=Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String endTime=sdf.format(endTimeNow.getTime());
System.out.println("A类方法:"+methodName+"()运行结束时间:"+endTime); }
}
在配置文件内配置切片,配置完成后的文件代码为:
<?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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置bean -->
<bean id="a" class="com.edu.aop.hello.A"></bean> <!-- 将切面类声明配置成一个bean -->
<bean id="x" class="com.edu.aop.hello.X"></bean> <aop:config>
<aop:aspect ref="x">
<!-- 配置前置通知及前置通知的切入点 -->
<aop:before method="methodX1" pointcut="execution(* com.edu.aop.hello.A.*())"></aop:before>
<!-- 配置后置通知及后置通知的切入点 -->
<aop:after method="methodX2" pointcut="execution(* com.edu.aop.hello.A.*())"></aop:after>
</aop:aspect>
</aop:config>
</beans>
6)部署运行。
运行结果为:

参考书籍《Java EE框架开发技术与案例教程》
Spring学习之旅(五)极速创建Spring AOP java工程项目的更多相关文章
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- Spring学习之旅(四)Spring工作原理再探
上篇博文对Spring的工作原理做了个大概的介绍,想看的同学请出门左转.今天详细说几点. (一)Spring IoC容器及其实例化与使用 Spring IoC容器负责Bean的实例化.配置和组装工作有 ...
- Spring学习之旅(三)Spring工作原理初探
详细的废话相信很多书籍视频资料都已经很多了,这里说几个小编个人认为对于理解Spring框架很重要的点.欢迎批评指正. 1)Spring的控制反转 先说说“依赖”,在面向对象程序设计中,类A中用到了类B ...
- Spring学习之旅(五)--AOP
什么是 AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是 OOP(Object-Oriented Programing,面向对象编程)的补充和完善. OO ...
- Spring学习之旅(六)Spring AOP工作原理初探
AOP(Aspect-Oriented Programming,面向切面编程)是Spring提供的关键技术之一. AOP基于IoC,是对OOP(Object-Oriented Programming ...
- Spring学习之旅(十)--MockMvc
在之前的 Spring学习之旅(八)--SpringMVC请求参数 我们是通过在控制台输出来验证参数是否正确,但是这样做实在是太耗时间了,我们今天来学习下 MockMvc,它可以让我们不需要启动项目就 ...
- Spring学习之旅(十五)--SpringBoot
在使用 Spring 的过程中,有时候会出现一些 ClassNotFoundException 异常,这是因为 JAR 依赖之间的版本不匹配所导致的.而 Spring Boot 就能避免绝大多数依赖版 ...
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
随机推荐
- 线性整流函数(ReLU)
线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代 ...
- 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 0.Practice questions:Sequence models & Attention mechanism
- 项目总结一:情感分类项目(emojify)
一.Emojifier-V1 模型 1. 模型 (1)前向传播过程: (2)损失函数:计算the cross-entropy cost (3)反向传播过程:计算dW,db dz = a - Y_oh[ ...
- 项目ITP(六) spring4.0 整合 Quartz 实现动态任务调度
前言 系列文章:[传送门] 项目需求: http://www.cnblogs.com/Alandre/p/3733249.html 上一博客写的是基本调度,后来这只能用于,像每天定个时间 进行数据库备 ...
- 从零开始学 Web 之 Vue.js(五)Vue的动画
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Cookie登录保存
Login.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Log ...
- Elasticsearch从入门到精通-Elasticsearch是什么
作者其他ELK快速入门系列文章 logstash快速入门实战指南 Kibana从入门到精通 一.前言 驱动未来商业发展的最重要“能源”不是石油,而是数据.我们还来不及了解它,这个世界已经被它淹没.多年 ...
- Win32文件系统编程
Win32文件系统编程 一丶了解什么是文件系统 文件系统是抽象的.是windows在软件层面提供的一层虚拟的数据结构. 文件系统分为NTFS 跟 FAT32. 具体看看两者的区别吧. 磁盘分区容量. ...
- 【原创】《windows驱动开发技术详解》第4章实验总结二
1 实验要求(WDM驱动) 2 编写过程 2.1 确立整体架构 2.1.1 入口函数——DriverEntry (1)作用 设置pDriverObject结构体,注册AddDevi ...
- 五种IO模型透彻分析
1.基础 在引入IO模型前,先对io等待时某一段数据的"经历"做一番解释.如图: 当某个程序或已存在的进程/线程(后文将不加区分的只认为是进程)需要某段数据时,它只能在用户空间中属 ...