亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 1803 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元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91视频国产精品 | 羞羞在线视频 | 久久亚洲国产精品 | 操视频网站 | 九九九精品 | 特级一级黄色片 | 亚洲日本va中文字幕区 | 久久毛片免费 | 精品国产三级 | 亚洲综合日韩 | 亚洲有色 | 综合久久一区二区三区 | 欧美成人免费夜夜黄啪啪 | 四影虎库最新2021 | 久久精品国产在爱久久 | 狠狠色丁香久久婷婷综合五月 | 免费国产午夜在线观看 | 老子午夜伦影理论片 | 国产精品免费综合一区视频 | 一级床上爽高清播放 | 91亚洲国产系列精品第56页 | 国产网站视频 | 狠狠色噜噜狠狠狠狠2021天天 | 99久久久国产精品免费牛牛四川 | 久热中文字幕在线 | 欧美高清不卡午夜精品免费视频 | 按摩毛片 | 久久黄色免费视频 | 中文字幕久久综合伊人 | 视频免费1区二区三区 | 视频免费1区二区三区 | aa毛片免费全部播放完整 | 伊人网综合在线视频 | 国产精品日本一区二区在线看 | 德国女人一级毛片免费 | 亚洲欧洲一区二区三区久久 | 欧美日韩国产成人高清视频 | 国产精品98福利小视频 | 日本一级特黄视频 | 色综合中文字幕在线亚洲 | a级做人爱免费播放 |