子敬正在创造自己的人生
需求有轻重缓急,功能有可控不可控。 需求有版本有截止(否则会无休无止),功能不可控变为可控。 集中兵力消灭敌人有生力量,集中优势兵力消灭敌人有生力量。

这个我一直让我想不通,后面iteye上看到了一篇文章才焕然大悟...

在此把文章引用到我blog里面,如下:

 

这段时间用了一下spring 2.5的@Autowired注释来做依赖注入,感觉真的不错,省掉了get、set的方法,整个类也看起来更加舒服了。 
在这期间对于@Autowired注释访问private的变量一直感到很好奇,查了一下相关资料,写了一个小例子。不过没看过@Autowired的源码,不确定是不是这样做的,应该差不多吧。 
代码如下: 

1.声明了一个注释 

Java代码  收藏代码
  1. @Retention(RetentionPolicy.RUNTIME)  
  2. public @interface TestAnno {  
  3.       
  4. }  



2.声明了一个含有private变量a的类 

Java代码  收藏代码
  1. public class TestAnnotation {  
  2.     @TestAnno  
  3.     private String a;  
  4.   
  5.     public String getA() {  
  6.         return a;  
  7.     }  
  8.   
  9.     public void setA(String a) {  
  10.         this.a = a;  
  11.     }  
  12.   
  13. }  



3.通过反射为a赋值 

Java代码  收藏代码
  1. public class MainTest {  
  2.     public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {  
  3.         TestAnnotation ta=new TestAnnotation();  
  4.         Field[] fs=TestAnnotation.class.getDeclaredFields();  
  5.         for(int i=0;i<fs.length;i++){  
  6.             if(fs[i].isAnnotationPresent(TestAnno.class)){  
  7.                 fs[i].setAccessible(true);  
  8.                 fs[i].set(ta, "你好");  
  9.             }  
  10.         }  
  11.         System.out.println(ta.getA());  
  12.     }  
  13. }  


关键是fs[i].setAccessible(true);这个方法,如果不设置这个方法则会抛出java.lang.IllegalAccessException的异常。网上也有人说setAccessible有安全性限制不要随便乱用。不过至少可以做到

 

refer from :http://www.iteye.com/topic/223891

posted on 2013-03-04 17:15  silentjesse  阅读(10371)  评论(0编辑  收藏  举报