日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統 2033 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條評論
主站蜘蛛池模板: 阳泉市| 常熟市| 天全县| 兰坪| 德州市| 定远县| 旌德县| 庆云县| 油尖旺区| 班玛县| 临湘市| 奉节县| 大余县| 张家口市| 鄯善县| 三原县| 谷城县| 玉屏| 肇源县| 驻马店市| 霍城县| 海淀区| 池州市| 南川市| 扶风县| 井陉县| 丹棱县| 始兴县| 紫金县| 山东省| 周宁县| 东乡族自治县| 夏河县| 商城县| 仙游县| 涞源县| 乌鲁木齐市| 长子县| 中西区| 二连浩特市| 贵南县|