zoukankan      html  css  js  c++  java
  • 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="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,..))"

    package test.spring.service.impl;
    
    import test.spring.service.PersonService;
    
    //代理对象实现目标对象全部接口
    public class PersonServiceBean implements PersonService {
    
    	public PersonServiceBean() {
    
    	}
    
    	@Override
    	public void save(String name) {
    		System.out.println("save()->>" + name);
    		throw new RuntimeException(">>----自己定义异常----<<");
    	}
    
    	@Override
    	public String getResult() {
    		return "getResult()==>>返回结果";
    	}
    
    }
    

    package test.spring.aop;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    
    public class MyInterceptor2 {
    
    	public void doAccessCheck() {
    		System.out.println("前置通知-->>");
    	}
    
    	public void doAfterReturning() {
    		System.out.println("后置通知-->>");
    	}
    
    	public void doAfter() {
    		System.out.println("终于通知");
    	}
    
    	public void doAfterThrowing() {
    		System.out.println("异常通知-->");
    	}
    
    	public Object doAround(ProceedingJoinPoint pJoinPoint) throws Throwable {
    		System.out.println("围绕通知");
    		// 这里假设pJoinPoint.proceed()不运行。后面拦截到的方法都不会运行,很适用于权限管理
    		Object result = pJoinPoint.proceed();
    		System.out.println("退出");
    		return result;
    	}
    
    }
    

    package test.spring.junit;
    
    import org.junit.Test;
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import test.spring.service.PersonService;
    
    public class AOPTest3 {
    
    	@Test
    	public void test() {
    		AbstractApplicationContext aContext = //
    		new ClassPathXmlApplicationContext("beans2.xml");
    		PersonService pService = (PersonService) aContext
    				.getBean("personService");
    		pService.save("LinDL");
    		pService.getResult();
    		aContext.close();
    	}
    
    }
    

  • 相关阅读:
    hdoj1251 统计难题 字典树
    nyoj322 sort 归并排序,树状数组
    优先队列 如何使用
    字典树(讲解+模版)
    hdoj1069 Monkey and Banana
    ny10 skilng
    hdoj1075 What Are You Talking About
    hdoj1171 Big Event in HDU
    ny613 免费馅饼
    Spring Boot2.0之Admin-UI分布式微服务监控中心
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7353899.html
Copyright © 2011-2022 走看看