博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring(十二)使用Spring的xml文件配置方式实现AOP
阅读量:6681 次
发布时间:2019-06-25

本文共 3488 字,大约阅读时间需要 11 分钟。

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

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();	}}

转载于:https://www.cnblogs.com/gavanwanggw/p/7353899.html

你可能感兴趣的文章
PullToRefreshListView 应用讲解
查看>>
git版本控制开发流程小结笔记(一)
查看>>
理解 Backbone.js中的bind和bindAll
查看>>
AD恢复误删除账号
查看>>
How to Create a Node.js Cluster for Speeding Up Your Apps
查看>>
我的友情链接
查看>>
ubuntu离线安装docker及问题解决
查看>>
Redis Cluster的noaddr标记
查看>>
isEmpty和isBlank区别
查看>>
Tomcat服务器性能优化
查看>>
Redux 中 combineReducers实现原理
查看>>
好的资料搜说引擎
查看>>
2、ROS实时检测在线IP数并自动对IP做限速
查看>>
[一文一命令]cut命令详解
查看>>
Koala五分钟快速入门
查看>>
Elasticsearch开启groovy动态语言支持
查看>>
sqlserver中查询表,查询表的字段方式
查看>>
过滤器的作用
查看>>
Jenkins配置基于角色的项目权限管理
查看>>
Oryx简介
查看>>