Spring的xml文件配置方式实现AOP

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

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,..))"

[java] view plain copy

  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. }

[java] view plain copy

  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. }

[java] view plain copy

  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. }

时间: 2024-10-05 22:28:12

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

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

配置文件与注解方式的有非常大不同,多了非常多配置项. 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=&

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

spring,springmvc,mybatis基本整合(一)–xml文件配置方式(2)之mapper接口 一,整合结构 二,所需jar包 如上图. 三,整合配置 1,web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://j

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

**这个整合,只是最基本的整合,并且是xml配置文件的方式之一,即其中的mybatis是采用非mapper接口的方式.(第二遍采用mapper接口方式:第三遍采用注解的方式:第四篇采用注解基于maven的方式),记录在这里,以免下次忘记时留作备用. ===================================================================================================** 一,整体结构 二,所需jar包: 实质上并不需

Spring_7_使用XML文件配置的方式实现AOP

接口类PersonService类与6相同. 1)实现类 PersonServiceBean: @Service // 使用自动扫描的方式自动装配 public class PersonServiceBean implements PersonService { @Override public void save(String name) { // throw new RuntimeException("异常"); System.out.println("调用save()方

idea的spring整合基于xml文件配置的mybatis报Invalid bound statement (not found): com.music.dao.MusicDao.findAll的问题

一. 题主当时就是自己尝试整合spring和mybatis的时候遇到了这个问题,当时题主只看到了用注解的方式配置的dao层,题主用的是xml文件配置的形式, 而且坑爹的是题主的两个文件的路径写的也不一致,就导致直接用<property name="basePackage" value="com.music.dao"></property> 导致绑定异常 后来在网上查到了解决的办法 ,就是如果路径一致,(如果一致你也就不会来看到本文了), 两个

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

写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean Definition到底是什么,咱们对着接口,逐个方法讲解 曹工说Spring Boot源码(3)-- 手动注册Bean Definition不比游戏好玩吗,我们来试一下 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean de

使用Spring读取xml文件中的配置信息

一般写程序时我们都会将一些配置信息写到配置文件中,以便在不修改源码的情况下对程序的某些点进行更改.这里介绍一种Spring读取xml配置文件的方式,其基本思路如下:定义一个java类,其中定义一些静态变量对应我们的配置信息,然后采用注入的方式将变量值初始化为配置值.示例代码如下: 新建一个java类: package java; public class Config { //要配置的值 public static int value = 0; //这里不能写成静态的 public void s

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

导包等不在赘述: 建立一个接口:ArithmeticCalculator,没有实例化的方法: package com.atguigu.spring.aop.impl.panpan; public interface ArithmeticCalculator { //创建一个接口,其是抽象的类,不能实例化 int add(int i,int j); int sub(int i,int j); int mul(int i,int j); int div(int i,int j); } 建立一个类:A

spring在xml文件中配置bean的三种方法

一.最常见,也是缺省,是调用spring的缺省工厂类 spring缺省工厂类:org.springframework.beans.factory.support.DefaultListableBeanFactory使用其静态方法preInstantiateSingletons() 配置文件中最普通最基本的定义一个普通bean<bean id="DvdTypeDAOBean" class="com.machome.dvd.impl.DvdTypeDAO" >