听了几节IT黑马营的SPRING课程,照着例程写了一个SPRING 中AOP的例子;

 一、准备工作

下载复制或配置JAR包。图方便,我将下载的SPRING包都加上去了。另外还需要aspectj的两个包,见下图

二、主要代码

我在SRC目录下面,建了com.spring.aop的包,然后在下面写的代码。

新建三个类文件Book.java Mybook.java和TestAop.java,主要测试AOP 的前后加载和环绕加载(横向抽取)

Book.java代码:

package com.spring.aop;

public class Book {
public void add() {
System.out.println("Add.............");
}
}

Mybook.java代码:

 package com.spring.aop;

 import org.aspectj.lang.ProceedingJoinPoint;

 public class Mybook {
public void aopAdd() { System.out.println("前置!!!");
} public void afterAdd() { System.out.println("后置!");
} public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("环绕前!");
proceedingJoinPoint.proceed(); System.out.println("环绕后!");
} }

TestAop.java

package com.spring.aop;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAop {
@Test
public void testSevice() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans3.xml");
Book book = (Book) context.getBean("book");
book.add();
} }

TestAop.java是测试运行的文件,直接在这个文件中,点鼠标右键,选Run as ------Junit Test

三、spring配置文件beans.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 " >
<!-- 1、配置对象 -->
<bean id = "book" class="com.spring.aop.Book"></bean>
<bean id = "mybook" class="com.spring.aop.Mybook"></bean>
<!-- 2、配置AOP操作 -->
<aop:config>
<!-- 2.1配置切入点 -->
<aop:pointcut expression="execution(* com.spring.aop.Book.*(..))" id ="pointcut1" />
<!-- 2.2配置切面 把增强用到方法上面-->
<aop:aspect ref="mybook">
<!--配置增强类型,method:增加类里使用哪个方法作为前置 -->
<aop:before method="aopAdd" pointcut-ref="pointcut1"/>
<aop:after-returning method="afterAdd" pointcut-ref="pointcut1"/>
<aop:around method="around" pointcut-ref="pointcut1"/>
</aop:aspect> </aop:config>
</beans>

其中,配置文件中前面的约束要先配好,我以前是从别的配置文件中复制过来的,一直没有学会从下载的包装中找约束。必须要有xmlns:aop="......"内容,否则会报错。

首先配置用到两个类的<bean> 
其次,配置AOP的核心:代码在<aop:config>和〈/aop:config>之间。aspect:pointcut是指定切入点的方法,expression="execution(* com.spring.aop.Book.*(..))"中,用*表示Book类的所有方法都可以被切入。id 是切入点名称,这个在后面的“切面和增强”配置中要用到,指明增强要用在什么地方;


四、运行结果

说明先执行“前置”aop:before指定的方法,再执行环绕aop:around指定的前方法。第三步执行环绕的后方法后置方法,最后执行后置方法 ,aspect:after-returning指定的方法 ;

Spring入门之AOP篇的更多相关文章

  1. Spring入门4.AOP配置深入

    Spring入门4.AOP配置深入 代码下载 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 之前学习AOP中的一些概念,包括连接点.切入点(pointc ...

  2. Spring入门3.AOP编程

    Spring入门3.AOP编程 代码下载: 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 前面学习的知识是Spring在Java项目中的IoC或DJ,这 ...

  3. Spring入门介绍-AOP(三)

    AOP的概念 AOP是面向切面编程的缩写,它是一种编程的新思想.对我们经常提起的oop(面对对象编程)有一定的联系. AOP和OOP的关系 AOP可以说是oop的某一方便的补充,oop侧重于对静态的属 ...

  4. Spring入门之AOP实践:@Aspect + @Pointcut + @Before / @Around / @After

    零.准备知识 1)AOP相关概念:Aspect.Advice.Join point.Pointcut.Weaving.Target等. ref: https://www.cnblogs.com/zha ...

  5. 让Spring不再难懂-aop篇

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

  6. Spring课程 Spring入门篇 5-1 aop基本概念及特点

    概念: 1 什么是aop及实现方式 2 aop的基本概念 3 spring中的aop 1 什么是aop及实现方式 1.1 aop,面向切面编程,比如:唐僧取经需要经过81难,多一难少一难都不行.孙悟空 ...

  7. Spring入门篇——AOP基本概念

    1.什么是AOP及实现方式 什么是AOP AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要 ...

  8. Spring入门篇总结:

    本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看 视频传送门:Spring入门篇 该门课程主要从Spring的Bean ...

  9. Spring Boot 入门之基础篇(一)

    原文地址:Spring Boot 入门之基础篇(一) 博客地址:http://www.extlight.com 一.前言 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是 ...

随机推荐

  1. nhibernate change connection

    http://stackoverflow.com/questions/4335827/changing-nhibernate-connectionstring http://stackoverflow ...

  2. 本机搭建PHP环境全教程(图文)

    为了更好的维护空间网站,研究和调试PHP程序,许多人需要在自己的计算机内搭建PHP环境.本文将介绍使用phpnow环境组件搭建的全过程.使用搜索工具,搜索phpnow<ignore_js_op& ...

  3. photo sphere viewer使用图像数据替代路径来生成全景图

    photo sphere viewer是一个js库,用来将全景图片生成360度的全景图像,但是其要求传入的是个路径.如何使用数据代替路径生成图像. 我采用的方法是用img标签生成图像,然后调用img. ...

  4. python字符串转日期

    需要两步 为了从字符串中提取时间,并进行比较,因此有了这个问题,如何将字符串转换成datetime类型 1.字符串与time类型的转换 >>> import time>> ...

  5. jsp标签、 项目全路径引用${ctx}

    请根据自己的需要选择以下标签. <%@ taglib uri="/struts-tags" prefix="s"%> <%@ taglib u ...

  6. solr6.6 配置同义词

    1.配置managed-schema <fieldType name="text_mmseg4j_simple" class="solr.TextField&quo ...

  7. 常见的七大排序算法Java实现

    /** * @author Javen * @Email javenlife@126.com * 2015年12月9日 */ public class Sorting { static int[] a ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-Switch Case语句是否会自动跳转到下一个

    在C#中,每一个case后面必须有break,所以输出1,也就是如果a=0,则只会执行case=0的那一段,当等于1之后不会继续.   在TwinCAT中,虽然CASE语句没有break,但是实际上不 ...

  9. poj 1426 Find The Multiple (bfs 搜索)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18012   Accepted: 729 ...

  10. Django——静态文件配置

    本文目的 最近用django开发项目,发现django的静态文件(js,css和img等)配置比较麻烦,开发环境和生产环境的配置还不一样,这里记录一下,作为备忘.我当前使用的版本是django v1. ...