欢迎转载交流,博客地址http://www.cnblogs.com/shizhongtao/p/3469776.html

首先,什么是aop,其实通俗一点讲就是,再方法执行时候我们加入其它业务逻辑。比如正常的执行顺序我们可以比作一条线,而aop就是在这个线上加上两刀,在断点 处加入新的东西。spring的aop实现借助了j2se的动态代理(dynamic proxies)来实习,具体java接口是InvocationHandler。因为java的动态代理是基于接口来实现的;而有些时候,我们的被代理类不一定实现了接口,这时候就需要CJLIB这个代理来实现,所以spring在aop时候需要引入CJLIB这个jar包,好在spring3.2以后,把这个jar集成到自身的框架中去了,不需要用户再去引入了。另外,spring aop用了aspect这个代理框架,所以在使用aop时候,我们要加入aspectjweaver.jar(如果是spring3的话,aspectjweaver需要1.68以后的版本)。

为了使用aop我们在spring的配置文件中要加入下面这个元素。schema的话,可以参看官方文档

<aop:aspectj-autoproxy/>

注:如果你不论哪种情况都希望使用CGLIB代理来配置切面服务,你这样写就可以了”

<aop:aspectj-autoproxy proxy-target-class="true"/>

如果只是想某个aop使用,就在那个aop的配置中加入这一属性:

<aop:config proxy-target-class="true">
<!-- other beans defined here... -->
</aop:config>

首先,我们定义Manager类,模仿mvc中的service层。

 package com.bing.test;

 import org.springframework.stereotype.Component;

 @Component("manager")
public class Manager {
private String myName="bingyulei";
private String description="nothing to say"; public void sayHello() {
System.out.println("Hello " + myName);
} public void getDes() {
System.out.println(description); }
}

假如我想在sayHello方法前假如自己的业务逻辑我该如何做,简单示例如下:

这样你就可以声明一个切面类,来进行测试,这里我用annotation的方式,切面类NotVeryUsefulAspect。

 package com.bing.test;

 import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; @Aspect
// 定义切面类
@Component
// 把类装载到容器,与@service等作用一样
public class NotVeryUsefulAspect { /* @Pointcut("execution(public * com.bing.test..*.sayHello(..))")
public void inManager() {}
@Pointcut("within(com.bing.test..*)")
public void excutionManager() {}*/
// 表示在方法前面执行
@Before("execution(public * com.bing.test.*.sayHello(..))")
public void before() { System.out.println("before Method");
}
@AfterReturning("execution(public * com.bing.test..*.sayHello(..))")
public void after() { System.out.println("after Method");
}
}

然后我们用junit测试一下:

package com.bing.jtest;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.bing.test.Manager; @ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class Testr { @Resource(name="manager")
private Manager manager; @Test
public void test() {
manager.sayHello();
//manager.getDes();
}
}

得到结果:

before Method
Hello bingyulei

如果用xml的配置方式,可以这样配置

 <bean id="myInterceptor" class="com.bing.test.NotVeryUsefulAspect"></bean>

     <aop:config>
<aop:aspect id="myAspect" ref="myInterceptor">
<aop:before method="before"
pointcut="execution(public * com.bing..*.sayHello(..))" />
<!-- 第一个*表示任何返回类型,“..”表示这个包下的所有子包,第二个*代表所有类,第二个“..”匹配了一个接受任意数量参数 -->
<!-- 当然sayHello方法你也可以用*代替,这样就表示所有方法。 -->
</aop:aspect>
</aop:config>

spring aop配置及用例说明(1)的更多相关文章

  1. spring aop配置及用例说明(2)

    欢迎交流转载:http://www.cnblogs.com/shizhongtao/p/3473362.html 这里先介绍下几个annotation的含义, @Before:表示在切入点之前执行. ...

  2. spring aop配置及用例说明(4)

    欢迎交流转载:http://www.cnblogs.com/shizhongtao/p/3476161.html 这里简单对xml的配置方式做一下描述.代码还是上一篇(http://www.cnblo ...

  3. spring aop配置及用例说明(3)

    欢迎转载交流:http://www.cnblogs.com/shizhongtao/p/3476336.html 1.这里说一下aop的@Around标签,它提供了在方法开始和结束,都能添加用户业务逻 ...

  4. Spring AOP配置方式

    AOP 面向切面编程,允许在 java 应用中的方法调用的前后做一些处理. 本文通过实例介绍两种主要的Spring AOP 配置方式:xml 方式配置,注解方式配置 XML 方式配置 1. 项目包类结 ...

  5. Java--简单的Spring AOP配置以及AOP事物管理,JDK/GCLib动态代理

    一.看一下简单的通过XML的AOP配置 1.首先创建一个简单的Student类 public class Student { private Integer age; private String n ...

  6. spring aop配置文档部分翻译

    欢迎转载交流: http://www.cnblogs.com/shizhongtao/p/3476973.html 下面的文字来自官方文档的翻译,具体事例以后奉上. Advisors "ad ...

  7. Spring——AOP配置时的jar包异常

    首先:这不是SSH整合的,这是单独配置Spring AOP的一个小例子. 所需要的jar包:如图: 我在这里出现的两个问题: 1.没有导入asm的jar包. 所报的异常为: java.lang.Cla ...

  8. Spring AOP配置简单记录(注解及xml配置方式)

    在了解spring aop中的关键字(如:连接点(JoinPoint).切入点(PointCut).切面(Aspact).织入(Weaving).通知(Advice).目标(Target)等)后进行了 ...

  9. perf4j+spring+aop 配置 注解方式

    今天将perf4j基于spring aop方式进入了接入,接入方法还是比较简单.具体配置如下: logback.xml <!--perf4j配置--> <appender name= ...

随机推荐

  1. material-dialogs

    https://github.com/afollestad/material-dialogs

  2. .net控件Control透明

    public partial class tspControl : UserControl { public tspControl() { InitializeComponent(); SetStyl ...

  3. 循环语句until和while

    一.until语句的基本格式 until 条件测试 do 语句块 done 只要条件测试语句未成功结束,则执行语句块.(如果一开始条件测试语句就成功退出,那么一次也不执行语句块.这里跟C语言中的do. ...

  4. Internet连接共享访问,依赖服务或组无法启动

    问题与现象 在启用本地Internet连接共享给VMware的虚拟网卡时,出现了如下错误提示,导致无法启用(如图一示): Internet连接共享访问被启用时,出现了一个错误.依赖服务或组无法启动 图 ...

  5. SQL Insert语句数据以以unicode码存储 解决存储数据出现乱码的问题

    写了个读取原始的文本数据导入数据库的工具 ,最后发现空中有几个值是乱码 例如 原始数据是 :Bjørn 存到数据库中是 Bj?rn 研究半天发现是一直以来忽略了一个标记‘N’ 2条 Insert 语句 ...

  6. [Security] Automatically adding CSRF tokens to ajax calls when using jQuery--转

    地址:http://erlend.oftedal.no/blog/?blogid=118 When building a ajax based application, you want to pro ...

  7. python学习笔记 class

    在这段时间中学习python在里面绕来绕去晕了. class和其他的语言都差不多,但是我理解中其实class和function差不多,只是将function封装起来. 在python中第一个class ...

  8. 小白日记3:kali渗透测试之被动信息收集(二)-dig、whios、dnsenum、fierce

    一.DIG linux下查询域名解析有两种选择,nslookup或者dig.Dig(Domain Information Groper)是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,M ...

  9. 炼数成金hadoop视频干货02

    视频地址:http://pan.baidu.com/s/1dDEgKwD 这个视频理论性太强,不过倒是给了自己唯一的选项就是自己实践,不用像以前那样视频中敲一个字符,我也敲一个字符 讲到的内容: 介绍 ...

  10. 完全自定义 TabBar

    // // CustomTabBarController.h // Dream // // Created by mac on 14-10-17. // Copyright (c) 2014年 HM. ...