配置文件与注解方式的有很大不同,多了很多配置项。

beans2.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
     <aop:aspectj-autoproxy />
    <bean id="personService" class="test.spring.service.impl.PersonServiceBean"></bean>
    <bean id="myInterceptor" class="test.spring.aop.MyInterceptor2"></bean>
    <aop:config>
           <aop:aspect id="myAspect" ref="myInterceptor">
                    <aop:pointcut  id="myPointCut"  expression="execution(* test.spring.service.impl.PersonServiceBean.*(..))" />
                    <aop:before pointcut-ref="myPointCut" method="doAccessCheck" />
                    <aop:after-returning pointcut-ref="myPointCut"  method="doAfterReturning" />
                    <aop:after-throwing pointcut-ref="myPointCut"  method="doAfterThrowing" />
                    <aop:around pointcut-ref="myPointCut" method="doAround" />
                    <aop:after pointcut-ref="myPointCut" method="doAfter" />
           </aop:aspect>
    </aop:config>
</beans> 

切面的切入点语法定义

  • 拦截test.spring.service.impl.PersonServiceBean下的所有方法
    expression="execution(* test.spring.service.impl.PersonServiceBean.*(..))"
  • 拦截test.spring.service.impl子包下的所有类的所有方法
    expression="execution(* test.spring.service.impl..*.*(..))"
  • 拦截test.spring.service.impl.PersonServiceBean下的所有返回值为String类型的方法
    expression="execution(java.lang.String test.spring.service.impl.PersonServiceBean.*(..))"
  • 拦截test.spring.service.impl.PersonServiceBean下的所有方法中第一个参数类型为String的方法
    expression="execution(* test.spring.service.impl.PersonServiceBean.*(java.lang.String,..))"
  1. package test.spring.service.impl;
  2. import test.spring.service.PersonService;
  3. //代理对象实现目标对象所有接口
  4. public class PersonServiceBean implements PersonService {
  5. public PersonServiceBean() {
  6. }
  7. @Override
  8. public void save(String name) {
  9. System.out.println("save()->>" + name);
  10. throw new RuntimeException(">>----自定义异常----<<");
  11. }
  12. @Override
  13. public String getResult() {
  14. return "getResult()==>>返回结果";
  15. }
  16. }
  1. package test.spring.aop;
  2. import org.aspectj.lang.ProceedingJoinPoint;
  3. public class MyInterceptor2 {
  4. public void doAccessCheck() {
  5. System.out.println("前置通知-->>");
  6. }
  7. public void doAfterReturning() {
  8. System.out.println("后置通知-->>");
  9. }
  10. public void doAfter() {
  11. System.out.println("最终通知");
  12. }
  13. public void doAfterThrowing() {
  14. System.out.println("异常通知-->");
  15. }
  16. public Object doAround(ProceedingJoinPoint pJoinPoint) throws Throwable {
  17. System.out.println("环绕通知");
  18. // 这里如果pJoinPoint.proceed()不执行,后面拦截到的方法都不会执行,非常适用于权限管理
  19. Object result = pJoinPoint.proceed();
  20. System.out.println("退出");
  21. return result;
  22. }
  23. }
  1. package test.spring.junit;
  2. import org.junit.Test;
  3. import org.springframework.context.support.AbstractApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5. import test.spring.service.PersonService;
  6. public class AOPTest3 {
  7. @Test
  8. public void test() {
  9. AbstractApplicationContext aContext = //
  10. new ClassPathXmlApplicationContext("beans2.xml");
  11. PersonService pService = (PersonService) aContext
  12. .getBean("personService");
  13. pService.save("LinDL");
  14. pService.getResult();
  15. aContext.close();
  16. }
  17. }

 
 

Spring的xml文件配置方式实现AOP的更多相关文章

  1. Spring(十二)使用Spring的xml文件配置方式实现AOP

    配置文件与注解方式的有非常大不同,多了非常多配置项. beans2.xml <?xml version="1.0" encoding="UTF-8"? & ...

  2. spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)

    **这个整合.仅仅是最主要的整合,而且是xml配置文件的方式之中的一个,即当中的mybatis是採用非mapper接口的方式.(第二遍採用mapper接口方式.第三遍採用注解的方式:第四篇採用注解基于 ...

  3. SSM框架中spring的XML文件配置

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  4. Spring中xml文件配置也可以配置容器list、set、map

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. Spring中Bean的配置:基于XML文件的方式

    Bean的配置一共有两种方式:一种是基于XML文件的方式,另一种是基于注解的方式.本文主要介绍基于XML文件的方式 <bean id="helloWorld" class=& ...

  6. Spring整合Hibernate的XML文件配置,以及web.xml文件配置

    利用Spring整合Hibernate时的XML文件配置 applicationContext.xml <?xml version="1.0" encoding=" ...

  7. Spring AOP:面向切面编程,AspectJ,是基于spring 的xml文件的方法

    导包等不在赘述: 建立一个接口:ArithmeticCalculator,没有实例化的方法: package com.atguigu.spring.aop.impl.panpan; public in ...

  8. Spring框架入门之基于xml文件配置bean详解

    关于Spring中基于xml文件配置bean的详细总结(spring 4.1.0) 一.Spring中的依赖注入方式介绍 依赖注入有三种方式 属性注入 构造方法注入 工厂方法注入(很少使用,不推荐,本 ...

  9. Spring中加载ApplicationContext.xml文件的方式

    Spring中加载ApplicationContext.xml文件的方式 原文:http://blog.csdn.net/snowjlz/article/details/8158560 1.利用Cla ...

随机推荐

  1. Warm myself by my hand

    周末的尾巴了. 前几天白日里的气温降到10摄氏度以下,穿上了秋裤.隔天跑一次步,晚上九点多,5公里,25分钟左右.换上薄薄的运动裤,两件运动衣.一出宿舍门就没觉得冷,跑着跑着就愈加热了起来.遇到的问题 ...

  2. CGGeometry Reference (一)

    知识点 frame 与bounds 的区别 1.frame 是这个视图的大小在父视图的位置 . 如x 20 y 20  width 200 height 300 2.bounds 是这个视图的大小在自 ...

  3. 自然数从1到n之间,有多少个数字含有1

        问题明确而简单.for循环肯定是不好的.       用递推方法:       定义h(n)=从1到9999.....9999  ( n 个 9)之间含有1的数字的个数.定义f(n)为n位数中 ...

  4. new road

    9月底进入到了新的公司,有些类似实习的时候的路程. 新公司的数据业务基本是一种幻想状态,完全没有什么数据方面的积淀.

  5. ajax实现--技术细节详解

    ajax原理和XmlHttpRequest对象 Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其 ...

  6. matlab 调用VLfeat库开篇问题

    准备工作见此网站 :http://cnyubin.com/?p=85 保存关闭startup.m文件后 重新打开matlab后 在命令行输入path或者vl_version无法检测到库已安装到matl ...

  7. excel上传与下载

    后台:        @RequestMapping(value = "/uploadFile.do", method = RequestMethod.POST)  public ...

  8. red hat 6.5 红帽企业Linux.6.5 yum This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. 解决办法

    1.删除redhat原有的yum rpm -aq|grep yum|xargs rpm -e --nodeps 2.下载yum安装文件 wget http://mirrors.163.com/cent ...

  9. 使用Hibernate Tools从数据库逆向生成Hibernate实体类

    自动生成model.java.*.hbm.xml 甚至是dao.java.*.ddl.*.html等等.一般也就如下三种方式1. MyEclipse 自带插件2. jboss的 hibernate-t ...

  10. Centos 7内核3升级到4

    步骤 1:检查已安装的内核版本 让我们安装了一个发行版,它包含了一个特定版本的内核.为了展示当前系统中已安装的版本,我们可以: # uname -sr 下面的图片展示了在一台 CentOS 7 服务器 ...