欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

如何為spring代理類設置屬性值

系統 1871 0

?

在問答頻道 有朋友問 《如何為spring代理類設置屬性值》 ?就寫了個小工具 供使用。思想就不講了。

現在有一個bean包含了私有屬性,如下:

Java代碼? ? 收藏代碼
  1. @Component ??
  2. public ? class ?Bean?{??
  3. ????String?name;??
  4. ??
  5. ???? public ?String?getName()?{??
  6. ???????? return ?name;??
  7. ????}??
  8. ??
  9. ???? public ? void ?setName(String?name)?{??
  10. ???????? this .name?=?name;??
  11. ????}??
  12. ??????
  13. }??

它被AOP配置過代理,代理配置為:

?

Java代碼? ? 收藏代碼
  1. <aop:pointcut?expression= "execution(*?com..*Bean.*(..))" ??
  2. ????????????id= "txBean" ?/>??

?現在對它進行測試:

Java代碼? ? 收藏代碼
  1. public ? class ?BeanTest? extends ?SpringContextTestCase{??
  2. ???? @Autowired ??
  3. ???? private ?Bean?bean;??
  4. ???? @Test ??
  5. ???? public ? void ?testBean(){??
  6. ????????bean.setName( "dylan" );??
  7. ????????System.out.println(bean.name);??
  8. ????????System.out.println(bean.getName());??
  9. ????}??
  10. }??

?這里的測試結果中,第一個輸出為null,第二個輸出為dylan,

由于項目中需要直接通過bean.name的方式來獲取屬性值,卻一直都只能得到null,請問如何才能獲取到我所期望的值"dylan"呢

?

?

默認是沒有辦法的。我幫你寫了個AOP切面 幫你完成設置屬性。?

Java代碼? ? 收藏代碼
  1. import ?java.beans.PropertyDescriptor;??
  2. import ?java.lang.reflect.Field;??
  3. import ?java.lang.reflect.Method;??
  4. ??
  5. import ?org.aspectj.lang.JoinPoint;??
  6. import ?org.aspectj.lang.annotation.After;??
  7. import ?org.aspectj.lang.annotation.Aspect;??
  8. import ?org.springframework.aop.support.AopUtils;??
  9. import ?org.springframework.beans.BeanUtils;??
  10. import ?org.springframework.core.annotation.Order;??
  11. ??
  12. @Aspect ??
  13. @Order (Integer.MIN_VALUE)??
  14. public ? class ?SetterAspect?{??
  15. ??????
  16. ???? @After (value= "execution(*?*.set*(*))?&&?args(value)" ,?argNames= "value" )??
  17. ???? public ? void ?after(JoinPoint?jp,?Object?value)?{??
  18. ????????Object?proxy?=?jp.getThis();??
  19. ????????Object?target?=?jp.getTarget();??
  20. ??????????
  21. ???????? if (AopUtils.isAopProxy(proxy))?{ //只有代理對象才需要處理 ??
  22. ??????????????
  23. ???????????? try ?{??
  24. ????????????????Class<?>?proxyClass?=?proxy.getClass();??
  25. ????????????????Class<?>?targetClass?=?target.getClass();??
  26. ????????????????String?methodName?=?jp.getSignature().getName();??
  27. ??????????????????
  28. ????????????????Method?m?=?BeanUtils.findDeclaredMethod(proxyClass,?methodName,? new ?Class[]{value.getClass()});??
  29. ????????????????PropertyDescriptor?descriptor?=?BeanUtils.findPropertyForMethod(m);??
  30. ????????????????String?propName?=?descriptor.getName();??
  31. ??????????????????
  32. ????????????????Field?f?=?targetClass.getClass().getDeclaredField(propName);??
  33. ???????????????? if (f?!=? null )?{??
  34. ????????????????????f.setAccessible( true );??
  35. ????????????????????f.set(proxy,?value);??
  36. ????????????????}??
  37. ????????????}? catch ?(Exception?e)?{??
  38. ????????????????e.printStackTrace(); //記錄好異常進行處理 ??
  39. ????????????}??
  40. ????????}??
  41. ????}??
  42. ??
  43. } ?

如何為spring代理類設置屬性值


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕成人乱码在线电影 | 亚洲欧美国产一区二区三区 | 免费啪视频在线观看免费的 | 人人爱天天做夜夜爽 | www.天天色.com | 三及毛片| 国产喷水视频 | 亚洲有码转帖 | 精品伊人 | 日本美女一区二区 | 日本精品久久久久护士 | 日韩欧美在线播放 | 一本伊大人香蕉久久网手机 | 色秀视频免费网站在线观看 | 日韩有码一区 | 成人在线激情网 | 中文字幕视频在线观看 | 在线一区二区三区 | 欧美搞黄视频 | 性福演算法 | 在线 丝袜 欧美 日韩 制服 | 国产色a | 青娱乐免费 | 国产亚洲精品久久久久婷婷图片 | 好叼视频 | 久久久久国产一区二区三区四区 | 天堂网中文字幕 | 韩国在线精品福利视频在线观看 | 欧美日韩在线视频观看 | 久久综合九色综合欧洲 | 欧美一区二区三区在观看 | 欧美精品v国产精品v日韩精品 | 久久国产乱子免费精品 | 日韩中文字幕一区 | 另类综合网 | 在线亚洲成人 | 一区二区三区久久 | 国产浮力影院在线地址 | 日韩精品亚洲人成在线播放 | 免费中文字幕 | 一区二区视屏 |