在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

SpringAOP 引介切面

2016-7-29 15:47| 发布者: zhangjf| 查看: 631| 评论: 0

摘要: 引介切面是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标类创建新的方法和属性,所以引介增强的链接点是类级别的,而非方法级别的。通过引介增强,我们可以为一个目标类添加一个接口实现。即原 ...
引介切面是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标类创建新的方法和属性,所以引介增强的链接点是类级别的,而非方法级别的。通过引介增强,我们可以为一个目标类添加一个接口实现。即原来的目标类未实现某个接口,通过引介增强可以为目标类创建某个接口代理。这种功能富有吸引力,因为他能够在横向定义接口实现的方法。思考问题的角度发生了很大的变化。这也是切面编程魅力所在!!!- o -。
  1. /**要侵入的接口*/
  2. package com.book.service;
  3. public interface Monitorable {
  4. public void setMonitorActive(Boolean flage);
  5. }
  6. package com.book.serviceImpl;
  7. import com.book.entity.User;
  8. /**目标类*/
  9. public class UserServiceImpl {
  10. public User findByName(String name) {
  11. // TODO Auto-generated method stub
  12. System.out.println("进入了service层了哦!!!");
  13. return new User(name,"26");
  14. }
  15. }
  16. /**增强*/
  17. package com.book.aop;
  18. import org.aopalliance.intercept.MethodInvocation;
  19. import org.springframework.aop.support.DelegatingIntroductionInterceptor;
  20. import com.book.service.Monitorable;
  21. public class PerformanceMonitor extends DelegatingIntroductionInterceptor implements Monitorable{
  22. private ThreadLocal<Boolean> laosn=new ThreadLocal<Boolean>();
  23. public void setMonitorActive(Boolean flage) {
  24. // TODO Auto-generated method stub
  25. laosn.set(flage);
  26. }
  27. public Object invoke(MethodInvocation mi) throws Throwable{
  28. Object obj=null;
  29. if(laosn.get()!=null&&laosn.get()){
  30. System.out.println("-------------哈哈!骚年!你被织入了接口了----------开始-----");
  31. obj=super.invoke(mi);
  32. System.out.println("-------------哈哈!骚年!你被织入了接口了----------结束-----");
  33. }else {
  34. obj=super.invoke(mi);
  35. }
  36. return obj;
  37. }
  38. }
  39. @Controller
  40. public class TianController {
  41. @Resource(name="userServiceProxyfactorybean")
  42. private UserServiceImpl userServiceProxyfactorybean;
  43. @RequestMapping("/tian2")
  44. public String tian2(){
  45. /**转换成侵入接口然后再调用接口方法改变行为*/
  46. Monitorable mo=(Monitorable)userServiceProxyfactorybean;
  47. mo.setMonitorActive(true);
  48. User user=proxyfactorybean.findByName("zhangtian");
  49. return "user/index";
  50. }
  51. }
  52. /**最后配置applicationContext.xml*/
  53. <!-- 此配置演示了 引介切点 -->
  54. <bean id="performancemonitoradvice" class="com.book.aop.PerformanceMonitor"></bean>
  55. <bean id="userserviceTarget" class="com.book.serviceImpl.UserServiceImpl"></bean>
  56. <bean id="userServiceProxyfactorybean" p:interfaces="com.book.service.Monitorable" p:interceptorNames="performancemonitoradvice" p:target-ref="userserviceTarget" p:proxyTargetClass="true"class="org.springframework.aop.framework.ProxyFactoryBean"/>
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 12:15

Copyright 2015-2025 djqfx

返回顶部