浏览 3921 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-04
在这期间对于@Autowired注释访问private的变量一直感到很好奇,查了一下相关资料,写了一个小例子。不过没看过@Autowired的源码,不确定是不是这样做的,应该差不多吧。 代码如下: 1.声明了一个注释 @Retention(RetentionPolicy.RUNTIME) public @interface TestAnno { } 2.声明了一个含有private变量a的类 public class TestAnnotation { @TestAnno private String a; public String getA() { return a; } public void setA(String a) { this.a = a; } } 3.通过反射为a赋值 public class MainTest { public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException { TestAnnotation ta=new TestAnnotation(); Field[] fs=TestAnnotation.class.getDeclaredFields(); for(int i=0;i<fs.length;i++){ if(fs[i].isAnnotationPresent(TestAnno.class)){ fs[i].setAccessible(true); fs[i].set(ta, "你好"); } } System.out.println(ta.getA()); } } 关键是fs[i].setAccessible(true);这个方法,如果不设置这个方法则会抛出java.lang.IllegalAccessException的异常。网上也有人说setAccessible有安全性限制不要随便乱用。不过至少可以做到 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-24
最好赋一下源码
|
|
返回顶楼 | |