什么是顾问?什么是通知?
顾问:从字面意思来讲,只找固定的几个可以使用
通知:所有的都可以用
举例说明通知
创建接口和实现类
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>
测试: