spring AOP中After如何增强
这篇文章将为大家详细讲解有关spring AOP中After如何增强,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一 配置
<?xmlversion="1.0"encoding="GBK"?> <beansxmlns="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-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <!--指定自动搜索Bean组件、自动搜索切面类--> <context:component-scan base-package="org.crazyit.app.service ,org.crazyit.app.aspect"> <context:include-filtertype="annotation" expression="org.aspectj.lang.annotation.Aspect"/> </context:component-scan> <!--启动@AspectJ支持--> <aop:aspectj-autoproxy/> </beans>
二 切面类
packageorg.crazyit.app.aspect; importorg.aspectj.lang.annotation.*; importorg.aspectj.lang.*; //定义一个切面 @Aspect publicclassReleaseAspect { //匹配org.crazyit.app.service包下所有类的、 //所有方法的执行作为切入点 @After("execution(*org.crazyit.app.service.*.*(..))") publicvoidrelease() { System.out.println("模拟方法结束后的释放资源..."); } }
三 接口
Hello
packageorg.crazyit.app.service; publicinterfaceHello{ //定义一个简单方法,模拟应用中的业务逻辑方法 voidfoo(); //定义一个addUser()方法,模拟应用中的添加用户的方法 intaddUser(Stringname,Stringpass); }
World
packageorg.crazyit.app.service; publicinterfaceWorld{ //定义一个简单方法,模拟应用中的业务逻辑方法 publicvoidbar(); }
四 实现类
HelloImpl
packageorg.crazyit.app.service.impl; importorg.springframework.stereotype.Component; importorg.crazyit.app.service.*; @Component("hello") publicclassHelloImplimplementsHello { //定义一个简单方法,模拟应用中的业务逻辑方法 publicvoidfoo() { System.out.println("执行Hello组件的foo()方法"); } //定义一个addUser()方法,模拟应用中的添加用户的方法 publicintaddUser(Stringname,Stringpass) { System.out.println("执行Hello组件的addUser添加用户:"+name); if(name.length()<3||name.length()>10) { thrownewIllegalArgumentException("name参数的长度必须大于3,小于10!"); } return20; } }
WorldImpl
packageorg.crazyit.app.service.impl; importorg.springframework.stereotype.Component; importorg.crazyit.app.service.*; @Component("world") publicclassWorldImplimplementsWorld{ //定义一个简单方法,模拟应用中的业务逻辑方法 publicvoidbar(){ System.out.println("执行World组件的bar()方法"); } }
五 测试类
packagelee; importorg.springframework.context.*; importorg.springframework.context.support.*; importorg.crazyit.app.service.*; publicclassBeanTest{ publicstaticvoidmain(String[]args){ //创建Spring容器 ApplicationContextctx=newClassPathXmlApplicationContext("beans.xml"); Hellohello=ctx.getBean("hello",Hello.class); hello.foo(); hello.addUser("悟空","7788"); Worldworld=ctx.getBean("world",World.class); world.bar(); } }
六 测试结果
执行Hello组件的foo()方法模拟方法结束后的释放资源...执行Hello组件的addUser添加用户:悟空模拟方法结束后的释放资源...Exception in thread "main" java.lang.IllegalArgumentException: name参数的长度必须大于3,小于10! at org.crazyit.app.service.impl.HelloImpl.addUser(HelloImpl.java:30) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:43) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy7.addUser(Unknown Source) at lee.BeanTest.main(BeanTest.java:26)
关于“spring AOP中After如何增强”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
推荐阅读
-
Spring框架基于注解开发CRUD详解
-
spring DI依赖注入方式和区别有哪些
-
spring data jpa开启批量插入、批量更新的示例分析
-
spring中怎么利用FactoryBean配置Bean
这篇文章将为大家详细讲解有关spring中怎么利用FactoryBean配置Bean,文章内容质量较高,因此小编分享给大家做个参考...
-
如何解决解决Spring Boot正常启动后访问Controller提示404的问题
小编给大家分享一下如何解决解决SpringBoot正常启动后访问Controller提示404的问题,希望大家阅读完这篇文章之后...
-
Spring中怎么解决循环依赖问题
本篇文章给大家分享的是有关Spring中怎么解决循环依赖问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有...
-
Spring(aop,如何通过获取代理对象实现事务切换)
Spring,aop,如何通过获取代理对象实现事务切换,恰卡网带你了解更多相关信息。Springaop获取代理对象实现...
-
Spring(bean,四种注入方式详解)
Spring,bean,四种注入方式详解,恰卡网带你了解更多相关信息。目录一、Set方式注入pojo层:1.xml文件t...
-
Spring(Cloud,如何保证微服务内安全)
-
Spring(Cloud,Config,使用本地配置文件方式)