如何通过反射获取Spring scoped bean的所有属性

如何通过反射获取Spring scoped bean的所有属性,第1张

这个bean并不是你想要的。。是spring生成的一个代理哈。。

因为这个是代理。。所以还没有创建你真正想要的目标。。也就是说你想要的目标不存在。。所以我觉得没有办法哦。。

不过真正的实例是你使用它的时候创建的。。你可以在调用这个方法前先使用一下她。。比如调用一下他的方法。。

首先,请您先理解一下反射的基本原理否则我下述的代码您可能有点摸不着头脑 反射是NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类

Fieldget(null) 附上文档 public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException返回指定对象上此 Field 表示的字段的值。如果该值是一个基本类型值,则自动将其包装在一个对象中。

你的意思就是要获取内部类属性和方法喽?

Class classes[]=clazzgetDeclaredClasses();//返回类包含的全部内部类

然后再进行处理呗。

Class clazz=XXgetClass();

Class classes[]=clazzgetDeclaredClasses();

for(Class c:classes){//对成员内部类进行反射

int i=cgetModifiers();

String s=ModifiertoString(i);

if(scontains("static"))//静态内部类的处理

cgetConstructor()newInstance();

else//实例内部类的处理

cgetConstructor(ricgetClass())newInstance(ric);

}

//由于匿名内部类没有构建器,因此无法创建实例,也无法直接访问其中的方法,但可以通过下面的方式巧秒的执行其中的方法或成员变量。

Runnable r=(Runnable)(clazzgetField("ta")get(ric));

rrun();

那就需要利用扩展方法,现将T的Type获取到,方法如下:

public static class Extensions

{

public static Type GetListItemType<T>(this IList<T> list)

{

return typeof(T);

}

}

可以用InternalsVisibleTo属性 在需要公开程序集的AssemblyInfocs 文件加:

[assembly: InternalsVisibleTo("目标程序集名称")]

如果使用了强名称,需要制定PublicKey:

[assembly: InternalsVisibleTo("目标程序集名称,PublicKey=xxx ")]

例如,A要对B公开内部成员,可在A的AssemblyInfocs文件中加 ( 独立行,位置随意 ) :

[assembly: InternalsVisibleTo("B")]

然后对A编译一次,B就可以访问了。

更详细的内容自己查MSDN吧

import javalangreflectField;

/

  简单反射

 

  @author huanghuapeng 2017年3月21日

  @see

  @since 10

 /

public class CountLine {

    public static void main(String[] args) {

        Person person = new Person();

        Class< extends Person> clazz = persongetClass();

        Field[] fields = clazzgetDeclaredFields();

        for (Field field : fields) {

            Class<> type = fieldgetType();

            Systemoutprintln(type);

        }

    }

}

class Person {

    private int id;

    private String name;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        thisid = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        thisname = name;

    }

}

以上就是关于如何通过反射获取Spring scoped bean的所有属性全部的内容,包括:如何通过反射获取Spring scoped bean的所有属性、怎样通过反射获得一个类的属性值或者方法返回值、如何通过反射来获取类的静态属性值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10150039.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存