博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring(七)Spring中的四种增强和顾问
阅读量:6231 次
发布时间:2019-06-21

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

Spring中的四种增强有那四种?

前置增强    后置增强  环绕增强  异常增强

先编写接口和实体类  ISomeService和SomeServiceImpl

package demo10;/** * Created by mycom on 2018/3/8. */public interface ISomeService {    public void doSome();}
package demo10;/** * Created by mycom on 2018/3/8. */public class SomeServiceImpl implements ISomeService {    public void doSome() {        System.out.println("=================");    }}

先来说第一个前置增强,直接用例子来说明

package demo10;import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;/** * Created by mycom on 2018/3/8. */public class BeforeAdvice implements MethodBeforeAdvice {    public void before(Method method, Object[] objects, Object o) throws Throwable {        System.out.println("=========before");    }}

在配置文件中

@Test    public void t1(){        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextBefore.xml");        ISomeService proxyService =(ISomeService) context.getBean("proxyService");        proxyService.doSome();    }

运行的结果是

2.后置增强和前置增强一样,只是改一改配置文件里的名称就可以

3.环绕增强

直接饮用上面的接口和实现类了

在创建另一个类 MethodAdvice

 

package demo12;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;/** * Created by mycom on 2018/3/8. */public class MethodAdvice implements MethodInterceptor {    public Object invoke(MethodInvocation methodInvocation) throws Throwable {        System.out.println("前置增强");        Object result = methodInvocation.proceed();        System.out.println("后置增强");        return result;    }}

4.异常增强

package demo13;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.springframework.aop.ThrowsAdvice;/** * Created by mycom on 2018/3/8. */public class MyThroesAdvice implements ThrowsAdvice {    public void afterThrowing(Exception ex){        System.out.println("网络出现错误");    }}
@Test   public void t2(){       ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextThrows.xml");       ISomeService proxyService =(ISomeService) context.getBean("proxyService");       try{           proxyService.doSome();       }catch (Exception ex){           ex.printStackTrace();       }

5.advisor  是顾问的意思  正对某一个方法增强

还有一个词是通知  advice  我自己的理解是  通知视同只所有人,顾问是针对某个人顾问,这样方便记忆,顾问包括通知

通知的方法有两种名称匹配方法切入点顾问和正则方法切入点顾问

先看第一种:

现在在ISomeService接口中在添加一个方法doAny(),在实现类中重写这个方法

那么在配置文件中

这个配置文件可以对比着之前写的配置文件看看有什么不同之处

@Test   public void t2(){       ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextAdvisor.xml");       ISomeService proxyService =(ISomeService) context.getBean("proxyService");       proxyService.doSome();       proxyService.doAny();   }

 第二种方法:正则方法切入点顾问

同样是饮用上面的接口和实现类,在配置文件中:

这个节点中name还有一个值是:patterns,其value值是:

这种方法用的是正则的符号

 

转载于:https://www.cnblogs.com/my-123/p/8533263.html

你可能感兴趣的文章
用户画像——persona分析法
查看>>
第一片51cto博文
查看>>
c++中back_inserter
查看>>
Discuz与Moodle实现同步登录:
查看>>
Linux C语言的定时器使用方法
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
IE8不支持锚链接的解决办法
查看>>
keepalived及其配置详解
查看>>
mysql left join和right join探索
查看>>
我的友情链接
查看>>
cobol学习之九输出9*9乘法表
查看>>
Python Web框架Tornado运行和部署
查看>>
git忽略文件
查看>>
整理软件成熟度等级3(CMMI3)的风险管理
查看>>
Nginx中文域名配置
查看>>
MySQL报错的解决'Can't connect to local MySQL server through socket '/tmp/mysql.sock'
查看>>
Xcode6中自动布局autolayout和sizeclass的使用
查看>>
使用FormData,进行Ajax请求并上传文件
查看>>
加载nginx配置
查看>>