spring AOP中After如何增强

这篇文章将为大家详细讲解有关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如何增强”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

发布于 2021-05-30 14:06:06
收藏
分享
海报
0 条评论
169
上一篇:Spring @Valid @Validated实现验证的方法 下一篇:JS图片懒加载怎么实现
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码