@Autowired 如何做到自动装配私有变量而不使用set方法的原理

 

熟悉jdk的话就知道,方法就是使用java.lang.reflect.Field类的:Field.setAccessible(true); 将字段设置为‘true’,就可以直接使用set方法为其赋值了。 
如果不设置‘true’的话,则会抛出‘java.lang.IllegalAccessException’的异常 
Spring中的代码如下(标红色的部分): 
------------------------------------------------------------------------------------------------------------------ 

          /** 
          * Either this or {@link #getResourceToInject} needs to be overridden. 
          */ 
          protected void inject(Object target, String requestingBeanName, PropertyValues pvs) throws Throwable { 
               if (this.isField) { 
                    Field field = (Field) this.member; 
                    ReflectionUtils.makeAccessible(field); 
                    field.set(target, getResourceToInject(target, requestingBeanName)); 

               } 
               else { 
                    if (checkPropertySkipping(pvs)) { 
                         return; 
                    } 
                    try { 
                         Method method = (Method) this.member; 
                         ReflectionUtils.makeAccessible(method); 
                         method.invoke(target, getResourceToInject(target, requestingBeanName)); 
                    } 
                    catch (InvocationTargetException ex) { 
                         throw ex.getTargetException(); 
                    } 
               } 

 

          } 

转自 : http://didiluck.iteye.com/blog/1779640

 

 

 

 

最后 由于春运快到了,给大家安利一个抢火车票的小程序心到抢票,微信扫码关注点击立即抢票即可

个人亲测效率很高,大家也可以加他们官方微信  xdticket  咨询。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值