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

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文件配置IOC容器

    创建相关的类(这里是直接在之前类的基础上进行修改) package com.guan.dao; public interface Fruit { String getFruit(); } packag ...

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

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

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

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

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

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

  8. 曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析【上】)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  9. 曹工说Spring Boot源码(17)-- Spring从xml文件里到底得到了什么(aop:config完整解析【中】)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

随机推荐

  1. UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  2. cassandra.yaml介绍

    cluster_name 集群的名字,默认情况下是TestCluster.对于这个属性的配置可以防止某个节点加入到其他集群中去,所以一个集群中的节点必须有相同的cluster_name属性. list ...

  3. Samba快速配置

    Samba是linux,unix,windows之间进行交互操作的软件组件,Sanma是基于GPL协议的自由开源软件. 快速配置samba文件服务器 1.关闭防火墙和SELinux [root@cen ...

  4. MVC 中301永久重定向

    public class PermanentRedirectResult : ViewResult { public string Url { get; set; } public Permanent ...

  5. 数据库备份checksum选项你会用么?

    SQL SERVER有好多好多功能,选项也一大堆,很多功能选项并不常用.但是如果真有这种需求的时候又想不起来~ 本篇我们就来聊聊备份里的选项checksum,这是个啥玩意?听都没听过?来看下图: 就是 ...

  6. 压力测试工具JMeter入门教程

    1.Jmeter 概要描叙 jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台.多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用,估计是不要钱吧,哈哈,功能上来说,整个平台 ...

  7. java 使用jar包

    //主类 路径 /home/fly/flywww/c/java import mypackage.One; import mypackage.Two; public class Test { publ ...

  8. html知识

    1.doctype作用 doctype标签可以告诉浏览器文档使用哪种HTML或者Xhtml规范.该标签可生命三种DTD类型,是严格版本,过渡版本和基于框架的HTML文档. 声明需要位于文档的最前面,处 ...

  9. Excel取消超级链接

    背景 本人使用Excel作笔记,偶尔会将一些url存到文档中.Excel会自动给这些url加上超链接,下次使用的时候,因为会单机跳转,导致选中复制很不方便. 解决方式 修改配置,避免给自动url加上超 ...

  10. centos常用操作

    文件夹赋权chmod -R 777 文件夹 zip压缩和unzip解压缩命令详解以下命令均在/home目录下操作cd /home #进入/home目录1.把/home目录下面的mydata目录压缩为m ...