我的主要问题是我可以使用Reflection API并且可以在User bean类中调用setter方法。但是我只有Only UserBean对象。我不知道要调用哪个setter方法。我想提取我的User Bean对象中的所有信息,并使用反射方法来调用合适的方法。
//->这是我的用户Bean类
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方法库。
我想要提取User Bean类中的信息,并根据值确定要调用的设置器。
在春季@AutoWired就是这样做的。他们如何识别要调用和注入依赖项的setter。
答案 0 :(得分:0)
Spring通过找出用@Autowired
,@Inject
,@Resources
等进行注释的setter来识别要注入依赖的setter。
然后,通过检查setter参数的类型来找出要注入setter的值,并注入具有相同类型的bean。
如果多个bean具有相同的类型,则检查bean名称。它将使用@Qaulifer
或@Resources
注入与注入点中配置的名称相同的bean。
如果仍有多个需要注入的bean,则会发生NoUniqueBeanDefinitionException
。
如果没有满足注入的bean,则会发生NoSuchBeanDefinitionException
。