@Autowired 如何使用反射工作以及如何调用适当的 Setter 方法

How @Autowired Work using Reflection and how invoke appropriate Setter Method

我的主要问题是我可以使用反射 API 并且我可以在我的用户 bean 中调用 setter 方法 class.But 我只有 UserBean 对象。我不知道哪个 setter 方法 invoke.i 想要提取我的用户 bean 对象中的所有信息并使用反射调用适当的方法。

//-->这是我的用户 Bean Class

public class User {

 private String name;
 private int age;

private String getName() {
    return name;
}
private void setName(String name) {
    this.name = name;
}
private int getAge() {
    return age;
}
private void setAge(int age) {
    this.age = age;
}

 void callMethod() { System.out.println("Name :- "+name+" Age :-"+age); }

 @Override
  public String toString() { return "User [name=" + name + ", age=" + age + "]";}
}

//--->这是我的主要方法

public class TestCase {

public static Object getBean(String beanClassName) throws Exception
{
    Class klass = Class.forName(beanClassName);
    Object obj = klass.newInstance();            
    Method[] b = klass.getDeclaredMethods();

    String MethodName1 = "setName";
    String MethodName2 = "setAge";
    String name ="sanket";
    int age = 21;

    for(int i=0;i<b.length;i++)
    {
        if(b[i].getParameterTypes().toString().equals(MethodName1))
        {
             b[i].setAccessible(true);
             b[i].invoke(obj,name); 
        }
        if(b[i].getName().equals(MethodName2))
        {
             b[i].setAccessible(true);
             b[i].invoke(obj,age);  
        }
    }


    return obj;
}

public static void main(String ars[]) throws Exception
{
    Object obj1 = getBean("www.Fouth.User");

    System.out.println(obj1.toString());
}
}

在我的情况下,我可以手动调用 setter 方法,因为我可以调用方法名称的 setter 方法基础。

我想在用户 Bean Class 中提取信息,并根据要调用的值 setter 进行识别。

在 spring @AutoWired 中 that.How 他们将确定要调用哪个 setter 并注入依赖项。

Spring 通过找出哪些 setter 被注释为 @Autowired@Inject 、 [=12 来识别哪些 setter 注入依赖关系=]等

然后它通过检查 setter 参数的类型来确定将哪个值注入 setter 并注入具有相同类型的 bean。

如果多个bean 具有相同的类型,则检查bean 名称。它将使用 @Qaulifer@Resources 注入与在注入点中配置的名称相同的 bean。

如果还有多个bean满足注入,NoUniqueBeanDefinitionException就会发生。

如果没有满足注入的bean,就会发生NoSuchBeanDefinitionException