一、引言:

  AspectJ框架不仅实现了面向切面编程,而且还支持注解,spring将它引入自己的规范之中。

二、需要了解:

  1. AspectJ是基于java语言的AOP框架
  2. spring2.0之后支持AspectJ切入点表达式
  3. 描述切点使用切入点表达式

三、通知的类型(重点)

四、利用AspectJ实现AOP计算代码执行时间戳

beans.xml文件

<!-- 目标类 -->
<bean id="userDaoImpl" class="com.xx.dao.UserDaoImpl"></bean>
<!-- 切面类 -->
<bean id="myAspect" class="com.xx.dao.MyAspect"></bean>
<!-- aop配置 -->
<aop:config>
<!-- 配置切面
<aop:aspect>:定义切面
<aop:pointcut>:目标类中的切点,即连接点中的切点
<aop:before>:通知类型共6种,分别为 前置、后置、环绕、异常、最终、引介
method:切面中的方法
pointcut-ref:引入切点
pointcut :自定义切点,局限于当前
-->
<aop:aspect ref="myAspect">
<aop:pointcut expression="execution(* com.xx.dao.UserDaoImpl.add*(..))" id="MyPointcut"/>
<aop:before method="before" pointcut-ref="MyPointcut"/>
<aop:after method="after" pointcut-ref="MyPointcut"/>
</aop:aspect>
</aop:config>

切面类:

package com.xx.dao;

public class MyAspect{

	private long beforeTime = 0;
private long afterTime = 0;
public void before(){
beforeTime = System.currentTimeMillis();
}
public void after(){
afterTime = System.currentTimeMillis();
System.out.println("运行时间"+(afterTime-beforeTime));
}
}

UserDao接口:

package com.xx.dao;

public interface UserDao {

	public void addUser();
public void delUser();
public void updateUser();
}

UserDaoImpl实现类:

package com.xx.dao;

public class UserDaoImpl implements UserDao{

	@Override
public void addUser() {
System.out.println("增");
}
@Override
public void delUser() {
System.out.println("删");
}
@Override
public void updateUser() {
System.out.println("改");
}
}

测试类:

package com.xx.dao;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test {
public static void main(String[] args) { String xmlPath = "com/xx/dao/beans.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(xmlPath);
UserDao userDao = (UserDao) context.getBean("userDaoImpl");
userDao.addUser();
userDao.delUser();
userDao.updateUser();
}
}

spring之AspectJ基于xml AOP编程的更多相关文章

  1. spring之AspectJ基于注解 AOP编程

    一.前言 使用注解代替之前在spring配置文件中配置目标类.切面类和aop配置. 二.注意 需要注意的是,需要在spring配置文件中引入如下,如果不添加,切面类中的@Aspect注解将不起作用 & ...

  2. spring的AspectJ基于XML和注解(前置、后置、环绕、抛出异常、最终通知)

    1.概念 (1)AspectJ是一个基于Java语言的AOP框架 (2)Spring2.0以后新增了对AspectJ切入点表达式的支持 (3)AspectJ是AspectJ1.5的新增功能,通过JDK ...

  3. 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP

    上节我们提到了使用基于注解实现的AOP,这节我们将用基于xml配置的方式来实现的AOP. 1.首先建立一个类,作为切面类,这个类主要用来实现注解中各种通知要实现的方法. package com.yan ...

  4. SSM-Spring-18:Spring中aspectJ的XML版

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- aspectJ的xml版是开发中最常用的: 下面直接已案例入手,毕竟繁琐的日子不多了 案例:两个接口,俩个实现 ...

  5. AspectJ基于xml和基于注解

    一.基于xml 执行的切入点中具体方法有返回值,则方法结束会立即执行后置通知,然后再执行环绕通知的放行之后的代码: 2.连接点即所有可能的方法,切入点是正真被切的方法,连接点方法名: 其中,只有环绕通 ...

  6. 【原】Spring和Dubbo基于XML配置整合过程

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个 ...

  7. JavaEE开发之Spring中的依赖注入与AOP编程

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...

  8. Spring 框架基础(04):AOP切面编程概念,几种实现方式演示

    本文源码:GitHub·点这里 || GitEE·点这里 一.AOP基础简介 1.切面编程简介 AOP全称:Aspect Oriented Programming,面向切面编程.通过预编译方式和运行期 ...

  9. 7 -- Spring的基本用法 -- 11... 基于XML Schema的简化配置方式

    7.11 基于XML Schema的简化配置方式 Spring允许使用基于XML Schema的配置方式来简化Spring配置文件. 7.11.1 使用p:命名空间简化配置 p:命名空间不需要特定的S ...

随机推荐

  1. ssh爆破篇

    使用pramiko模块 代码图: import paramiko import sys import time def cont(): b=open(sys.argv[1],'r').read().s ...

  2. CodeForces798-B. Mike and strings-string中的find()函数

    好久好久好久之前的一个题,今天翻cf,发现这个题没过,补一下. B. Mike and strings time limit per test 2 seconds memory limit per t ...

  3. (a == 1 && a == 2 && a == 3),何时为true?

    今天浏览一些技术网站,看到这个题目.虽然觉着代码这么写的可能性低之又低,但是却也考验对js了解的程度. 在 JavaScript 中 (a ==1 && a== 2 && ...

  4. SSH私用私钥登陆

    1.导入私钥,将私钥文件放到当前登陆用户目录下的.ssh目录下 2.指定私钥登陆,ssh -i .ssh/ssh_rsa  root@target.com 如果出现了下面这种情况 这是因为私钥文件权限 ...

  5. angular-dragon-drop.js 双向数据绑定拖拽的功能

    在做公司后台物流的时候,涉及到34个省市分为两个部分,一部分为配送区域,另一部分为非配送区域,想利用拖拽的功能来实现,最好两部分的数组能自动更新. 刚好找到angular-dragon-drop.js ...

  6. C++ 不定参数(转)

    转自:http://www.cnblogs.com/jerrychenfly/archive/2010/10/22/1858232.html 下面,我们来看一下,如果在c++的函数中接收数量不定的函数 ...

  7. .31-浅析webpack源码之doResolve事件流(2)

    放个流程图: 这里也放一下request对象内容,这节完事后如下(把vue-cli的package.json也复制过来了): /* { context: { issuer: '', compiler: ...

  8. Git的简单的基本使用

    前言: 接触了Android Studio,自然是知道了Github这个网站,这个网站有许多大神们做的开源库,我们只需要简单地引入就是可以使用到这些开源库从而实现酷炫的效果,最近也是刚接触到Git的使 ...

  9. phpstudy最新版中php5.6版报错

  10. Switch 语句

    如果您希望有选择地执行若干代码块之一,请使用 Switch 语句. 使用 Switch 语句可以避免冗长的 if..elseif..else 代码块. 语法 工作原理: 对表达式(通常是变量)进行一次 ...