什么是顾问?什么是通知?
顾问:从字面意思来讲,只找固定的几个可以使用
通知:所有的都可以用
举例说明通知
创建接口和实现类
package cn.happy.day11ProxyFactory; /** * Created by Administrator on 2018/3/8. */ public interface ISomeService { public void doSome(); public void doAny(); } package cn.happy.day11ProxyFactory; /** * Created by Administrator on 2018/3/8. */ public class SomeServiceImpl implements ISomeService { public void doSome() { System.out.println("do Something"); } public void doAny() { System.out.println("do Any"); } }
创建一个类
package cn.happy.day11ProxyFactory; import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method; /** * Created by Administrator on 2018/3/8. */ public class BeforeAdvice implements MethodBeforeAdvice { public void before(Method method, Object[] objects, Object o) throws Throwable { System.out.println("我是通知"); } }
配置xml
<!--目标类型--> <bean id="service" class="cn.happy.day11ProxyFactory.SomeServiceImpl"></bean> <!--增强--> <bean id="beforeAdvice" class="cn.happy.day11ProxyFactory.BeforeAdvice"></bean> <!--代理工厂Bean--> <bean id="Proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <!--引用目标类型--> <property name="target" ref="service"/> <property name="interceptorNames" value="beforeAdvice"/> </bean>
测试结果
通知是针对所有的方法进行
顾问
只需修改xml文件配置即可,
<!--目标类型--> <bean id="service" class="cn.happy.day11ProxyFactory.SomeServiceImpl"></bean> <!--增强--> <bean id="beforeAdvice" class="cn.happy.day11ProxyFactory.BeforeAdvice"></bean> <!--顾问--> <bean id="advisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="beforeAdvice"></property> <!--value:设置方法名,多个方法之间用逗号分隔--> <property name="mappedNames" value="doSome"></property> </bean> <!--代理工厂Bean--> <bean id="Proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <!--引用目标类型--> <property name="target" ref="service"/> <property name="interceptorNames" value="advisor"/> </bean>
测试: