Spring中的Advisor,Advice,Pointcut .
一、Spring中的Advisor,Advice,Point概述
1、Advisor:充当Advice和Pointcut的适配器,类似使用Aspect的@Aspect注解的类(前一章节所述)。一般有advice和pointcut属性。
祖先接口为org.springframework.aop.Advisor,应用中可直接使用org.springframework.aop.support.DefaultPointcutAdvisor
2、Advice:用于定义拦截行为,祖先接口为org.aopalliance.aop.Advice,该接口只是标识接口,应用中可直接实现BeforeAdvice ,ThrowsAdvice,MethodInterceptor ,AfterReturningAdvice ,IntroductionInterceptor 等子接口
3、Pointcut:用于定义拦截目标集合,祖先接口为org.springframework.aop.Pointcut
二、Spring中的Advisor,Advice,Point的应用
1、编写Advisor实现类
在此可直接使用org.springframework.aop.support.DefaultPointcutAdvisor
2、编写Advice实现类
public class PlayAdvice implements MethodBeforeAdvice{
public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println("my before advice");
// method.invoke(target, args); 如果再调用这句,则目标方法会执行多一次
}
}
3、编写Pointcut实现类
public class PlayPointcut implements Pointcut {
public ClassFilter getClassFilter() {
return new PlayClassFilter();
}
public MethodMatcher getMethodMatcher() {
return new PlayMethodMatcher();
}
}
//PlayClassFilter的定义
class PlayClassFilter implements ClassFilter {
public boolean matches(Class clazz) {
if(clazz.getSimpleName().equals("Play"))
return true;
return false;
}
}
//PlayMethodMatcher的定义
class PlayMethodMatcher implements MethodMatcher {
public boolean isRuntime() {
return true;
}
public boolean matches(Method method, Class c) {
if(c.getSimpleName().equals("Play")&&method.getName().contains("Service"))
return true;
return false;
}
public boolean matches(Method method, Class c, Object[] args) {
if(c.getSimpleName().equals("Play")&&method.getName().contains("Service"))
return true;
return false;
}
}
4、编写目标类
public class Play {
public void playService(String what){
System.out.println("play "+what);
}
}
5、在配置文件中配置
<bean id="adviceBean" class="com.hss.sp.aop.PlayAdvice"/>
<bean id="pointcutBean" class="com.hss.sp.aop.PlayPointcut"/>
<bean id="playService" class="com.hss.sp.service.Play"/>
<bean
class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="adviceBean"></property>
<property name="pointcut" ref="pointcutBean"></property>
</bean>
6、测试,结果
BeanFactory bf=new ClassPathXmlApplicationContext("applicationContext.xml");
Play play=(Play)bf.getBean("playService");
play.playService("pingpong");
输出:
my before advice
play pingpong
分享到:
相关推荐
Spring framework是很有前途的AOP技术。作为一种非侵略性的,轻型的AOP framework,你无需使用预编译器或其他的元标签,便可以在Java...advisor是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码。
是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码 三、AOP实现方式 依据织入方式的不同,分为 1、编译期织入 2、类加载器织入 3、动态代理织入 AspectJ:1,2 Spring AOP:3
Advice PointCut (次要业务) (目标对象和目标方法) ClassFilter MethodMatcher (判断当前被拦截对象是不是当前顾问需要管理对象) (当前被拦截的方法是不是我们所需要主要业务方法) person对象。eat()
7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”...
一. 准备工作 二. Spring -Aop入门 三. Spring-Aop 前置通知、后置通知、环绕通知、异常通知实现 四. Spring-Aop 之Pointcut+advice+Advisor 实现 五.Spring-Aop 引入的介绍
面向方面的编程,它们的术语,方面,实现类,建议,Advisor it与Pointcut和Advice的关系然后.................................... 明确的联合点--------->为其库目标对象代理...........>结合业务方法及其建议
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
Before Advice After Advice Around Advice Throw Advice Pointcut、Advisor Pointcut 定义了 Advice 的应用时机,在 Spring 中,使用 PointcutAdvisor 将 Pointcut 与 Advice 结合成为一个...
7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用...
<aop:advisor pointcut-ref="noTxServiceOperation" advice-ref="noTxAdvice" /> <tx:advice id="defaultTxAdvice"> *" read-only="true" /> *" /> </tx:advice> <tx:advice id=...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用...
<aop:advisor pointcut-ref="allManagerMethodPdm" advice-ref="txAdvicePdm"/> </aop:config> <!-- ibatis插件 --> <bean id="sqlMapClient" class="org.springframework.orm.ibatis....
<aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService"/> <!-- 配置那个类那个方法用到事务处理 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> *" read-...
<!--配置连接池--> <!--配置生产SqlSession对象的工厂--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> ... <aop:advisor advice-ref="advice" pointcut-ref=
-- <aop:advisor advice-ref="myAdvice" pointcut-ref="myPointcut"/>--> <!-- </aop:config>--> <!--AOP代表的意思: // 所有符合pointcut条件的类或方法,都执行myAdvice建议,advice里定义了,所有的save方法...
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
<aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> <!-- 通知配置 --> <tx:advice id="txAdvice" transaction-manager="myJtaManager"> *" rollback-for="Exception"/> *" rollback-...
<aop:advisor advice-ref="transactionAdvice" pointcut-ref="transactionPointCut"/> spring和struts2的整合 加入整合包 加入struts的必须包 struts整合spring的包 struts2-spring-plugin-2.3.15.3.jar spring...
<!-- - Application context definition for JPetStore's business layer. ... <aop:advisor pointcut="execution(* com.longxian.drp.manager.*.*(..))" advice-ref="txAdvice"/> </aop:config> </beans>