编译工具: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工程项目的更多相关文章

  1. Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...

  2. Spring学习之旅(四)Spring工作原理再探

    上篇博文对Spring的工作原理做了个大概的介绍,想看的同学请出门左转.今天详细说几点. (一)Spring IoC容器及其实例化与使用 Spring IoC容器负责Bean的实例化.配置和组装工作有 ...

  3. Spring学习之旅(三)Spring工作原理初探

    详细的废话相信很多书籍视频资料都已经很多了,这里说几个小编个人认为对于理解Spring框架很重要的点.欢迎批评指正. 1)Spring的控制反转 先说说“依赖”,在面向对象程序设计中,类A中用到了类B ...

  4. Spring学习之旅(五)--AOP

    什么是 AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是 OOP(Object-Oriented Programing,面向对象编程)的补充和完善. OO ...

  5. Spring学习之旅(六)Spring AOP工作原理初探

    AOP(Aspect-Oriented  Programming,面向切面编程)是Spring提供的关键技术之一. AOP基于IoC,是对OOP(Object-Oriented Programming ...

  6. Spring学习之旅(十)--MockMvc

    在之前的 Spring学习之旅(八)--SpringMVC请求参数 我们是通过在控制台输出来验证参数是否正确,但是这样做实在是太耗时间了,我们今天来学习下 MockMvc,它可以让我们不需要启动项目就 ...

  7. Spring学习之旅(十五)--SpringBoot

    在使用 Spring 的过程中,有时候会出现一些 ClassNotFoundException 异常,这是因为 JAR 依赖之间的版本不匹配所导致的.而 Spring Boot 就能避免绝大多数依赖版 ...

  8. Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一

    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...

  9. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

随机推荐

  1. Oracle报错#“ORA-01791: 不是 SELECTed 表达式”解决方法

    今天遇到一个Oracle报错,写篇博客记录一下 简单看一下下面这个sql,这也查询是没报错的 select a.area_seq, a.area_name from t_unit_area a WHE ...

  2. Boostnote 为程序员的开源式记事本

    以前使用win10的时候,有个edairy可以使用,并且效果非常好,现在ubuntu上使用的时候,才找个这样的程序员实在太难了,找了好久,才找到一个使用比较顺手的,这里就做个备忘了,顺便做个推荐,实在 ...

  3. 一文总结 Linux 虚拟网络设备 eth, tap/tun, veth-pair

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Linux 虚 ...

  4. Windows下安装及使用NVM

    Windows下安装及使用NVM 所谓nvm就是一个可以让你在同一台机器上安装和切换不同版本node的工具.这里是一篇安装及使用教程. 第一步:下载nvm 可以到github上下载最新版本https: ...

  5. angular整合环信webIM

    此处有两大坑: 1.下载easemob-websdk此npm包时,并没有下载strophe.js.crypto-js.underscore这三个包,需要自己手动下载. 2.如下方标红位置所示,需要自己 ...

  6. Apace、Ngnix、Tomcat三者关系

    Apache,指的应该是Apache软件基金会下的一个项目--Apache HTTP Server Project:Nginx同样也是一款开源的HTTP服务器软件(当然它也可以作为邮件代理服务器.通用 ...

  7. [Maven]Maven如何得到单独的单元测试报告

    ----------------------------------------------------------------- 原创博文,如需转载请通知作者并注明出处! 博主:疲惫的豆豆 链接:h ...

  8. Android数据保存之SharedPreference

    前言: 程序中处理的大部分问题都与数据有关,读取数据显示在UI上,读取的数据可以是本地的,也可以是网络的.保存用户数据到存储空间,可以是本地的数据库,文件等,也可以是保存到网络服务器.总之大部分的程序 ...

  9. select实现高并发服务器

    前言:周末学了两天网络编程,把之前的不懂一些问题基本掌握了,例如TCP状态转换图.close和shutdown函数的区别.select函数等,今天分享给大家. 一.网络编程基础知识 在写代码之前,需要 ...

  10. 改善JAVA代码01:考虑静态工厂方法代替构造器

    前言 系列文章:[传送门]   每次开始新的一本书,我都会很开心.新书新心情. 正文 静态工厂方法代替构造器 说起这个,好多可以念叨的.做了一年多的项目,慢慢也有感触. 说起构造器 大家很明白,构造器 ...