spring - @Autowired 如何使用反射以及如何调用适当的 Setter 方法
问题描述
我的主要问题是我可以使用反射 API,并且可以在我的 User bean 类中调用 setter 方法。但是我只有 UserBean 对象。我不知道要调用哪个 setter 方法。我想提取我的用户 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 方法基础。
我想在用户 Bean 类中提取信息,并根据要调用的 setter 的值来确定。
在春天,@AutoWired 就是这样做的。他们将如何识别调用哪个设置器并注入依赖项。
解决方案
Spring 通过确定哪些 setter 用 , 等注释来识别哪些 setter 注入@Autowired
依赖@Inject
项@Resources
。
然后它通过检查 setter 参数的类型来确定将哪个值注入到 setter 中,并注入具有相同类型的 bean。
如果多个 bean 具有相同的类型,则检查 bean 名称。它将使用@Qaulifer
或注入与注入点中配置的名称相同的 bean @Resources
。
如果仍然有多个 bean 满足注入,NoUniqueBeanDefinitionException
就会发生。
如果没有满足注入的 bean,NoSuchBeanDefinitionException
就会发生。
推荐阅读
- c - GCC 在有效的 stb_image.h 上产生错误
- c# - 如何从 launchsettings.json 获取当前应用程序 url
- django-rest-framework - 如何将 Simple JWT 用于自定义用户模型
- css - 如何在物化CSS中使背景图像适合全宽div
- javascript - Javascript chart.js 数据对象/数组
- r - 如何在 R 中计算此数据框的差异
- javascript - 用户输入的时间为零,即使在 javascript 中应该更多
- r - 尝试显示散点矩阵时提取变量中的模型公式无效
- python - 通过 L0 范数/GEKKO 中的非零元素数约束混合整数非线性优化问题
- python - 如何构造嵌套的for循环?