1.AOP
面向方面编程
OOP:
面向对象编程
OOP:主要是关于对象怎么封装的问题
AOP:为程序的某个切面进行的通用处理
2.spring中两大核心概念:
IOC:依赖注入
AOP:对程序的切面作统一的处理
3.使用AOP的”前通知“
A.面向接口
B.定义通知类
C.在配置文件中注入相关节点
4.拦截器
先写一个拦截器
实现了org.springframework.aop.MethodBeforeAdvice接口
在before方法里做拦截后的逻辑处理
通过ProxyFactoryBean这个类来进行拦截控制
当得到的loginAdvice中的login对象方法每调用一次,都会使用拦截器loginbefore的方法
interceptorNames是绑定的拦截器的名字(要求是String类型的,这里用value标签)
proxyInterfaces是以某种接口来返回 这里是Ido
target是需要拦截器的对象,被管理的对象
同样的,也可以使用ProxyFactoryBean来进行异常处理等事项
这里也需要一个Advice
实现org.springframework.aop.ThrowsAdvice类
里面的方法可以为
从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
此接口中需要实现的方法如下:
6.批量拦截类NameMatchMethodPointcutAdvisor
虽然拦截器实现MethodBeforeAdvice,但是在配置的时候可以这么配置:
面向方面编程
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开头的方法都会被拦截器抓到