applicationContext.getBean(cls).getClass().getDeclaredFields();
//应用上下文获取的bean反射后拿不到这个类里面的属性getDeclaredFields();这个方法返
//回的属性集合并没有原本类里的属性。怎么回事??
因为你拿到的是代理吧,你输出class看看吧
是啊,从应用上下文拿的bean
那为啥代理的就没有啊
@给我个面子: 因为是代理类啊,又不是你那个bean真正的类,当然没这些属性啊
@yytxdy: 那就是没法通过上下文获取bean中是属性了咯?
@给我个面子: 不行,一般也没需求这么干的
@yytxdy:我是自定义一个注解,想给有这个注解的属性赋值。但是我不想通过setter的方法赋值,例如:Method method = cls.getMethod("set" + name, Menu.class);。method.invoke(applicationContext.getBean(cls), requestAttributes.getRequest().getSession().getAttribute("menuInfo"));
就想着用field.set(obj,value);赋值。但是拿不到属性就用不了这个方法。
@yytxdy: 大神有什么解决方发吗
@给我个面子: 那你看看@Autowired实现逻辑不就好了吗,实际上硬要取,好像也能取到,你判断下,是cglib代理的话就取父类的字段,不过这个实现就不是很优雅了,你可以参考@Autowired的实现自己实现一个
@yytxdy: 这个的源码是哪个class,我找不到
@给我个面子: AutowiredAnnotationBeanPostProcessor
@yytxdy: 好的,谢谢大神
报错还是拿不到呢?这个类要被spring管理。你把这个cls对应的类加上注解。
不是报错,拿到bean了,是没拿到原本类里的属性
@给我个面子: 试试
Cls cls = new cls();
cls.getClass().getDeclaredFields();
你看这样能拿到嘛?
@mowen285: 这肯定可以呀,但是我并不想用这种,不符合我开发功能的要求
@给我个面子: //把私有属性公有化
field.setAccessible(true); 加上这个
@mowen285: 老哥,这中方法不符合我的需求。要符合我就不用上来问了。
唉,算了
– 给我个面子 3年前算了算了
– 给我个面子 3年前