Spring 03 (AOP 拦截器)

1.AOP
面向方面编程

OOP:
面向对象编程

OOP:主要是关于对象怎么封装的问题
AOP:为程序的某个切面进行的通用处理


2.spring中两大核心概念:
IOC:依赖注入
AOP:对程序的切面作统一的处理


3.使用AOP的”前通知“
A.面向接口
B.定义通知类
C.在配置文件中注入相关节点

4.拦截器
<bean id="doNow" class="windy.demo.DoNow"></bean>
<bean id="dobefore" class="windy.demo.DoAdvice"></bean>

<bean id="doAdvice" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>windy.demo.Ido</value>
</property>
<property name="target">
<ref bean="doNow"/>
</property>
<property name="interceptorNames">
<value>dobefore</value>
</property>
</bean>


先写一个拦截器
实现了org.springframework.aop.MethodBeforeAdvice接口
在before方法里做拦截后的逻辑处理

通过ProxyFactoryBean这个类来进行拦截控制
当得到的loginAdvice中的login对象方法每调用一次,都会使用拦截器loginbefore的方法
interceptorNames是绑定的拦截器的名字(要求是String类型的,这里用value标签)
proxyInterfaces是以某种接口来返回 这里是Ido
target是需要拦截器的对象,被管理的对象

同样的,也可以使用ProxyFactoryBean来进行异常处理等事项
这里也需要一个Advice
实现org.springframework.aop.ThrowsAdvice类
里面的方法可以为
public void afterThrowing(ArithmeticException e);
public void afterThrowing(Method method,Object[] args,Object target,NullPointerException e);

从Spring API中可以看到
There aren't any methods on this interface, as methods are invoked by reflection. Implementing classes should implement methods of the form:
afterThrowing([Method], [args], [target], Throwable subclass)
只有最后一个参数是必须的

5.返回通知AfterReturningAdvice
实现org.springframework.aop.AfterReturningAdvice
此接口中需要实现的方法如下:
public void afterReturning(Object returnvalue, Method m, Object[] arg2,
Object target) throws Throwable {
System.out.println(target.getClass().getName()+"类中"+m.getName()+"方法被调用,其返回值为:"+returnvalue);
}


6.批量拦截类NameMatchMethodPointcutAdvisor
虽然拦截器实现MethodBeforeAdvice,但是在配置的时候可以这么配置:
<bean id="userBefore" class="com.sun.demo.UserDaoBeforeAdvice"></bean>
<bean id="log" class="com.sun.demo.Log"></bean>

<bean id="named" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice">
<ref bean="userBefore"/>
</property>
<property name="mappedNames">
<list>
<value>del*</value>
</list>
</property>
</bean>
这里的list就是需要匹配拦截的字符串 比如所有以del开头的方法都会被拦截器抓到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值