我刚刚开始学习Spring框架,我只是好奇Spring如何将bean自动连接到另一个没有setter方法的bean的私有变量。例如,我有一个DependentBean,它依赖于DependedBean ...
package com.devkun;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class Kirigaya extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toyi);
}
public void Importf(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivity(intent);
}
}
和DependedBean ......
@Component
public class DependentBean {
@Autowired
private DependedBean dependedBean; //this class has no "setDependedBean" setter method..
}
当spring boot应用程序启动时,即使DependentBean对象没有用于设置其dependedBean属性的setter方法,它也可以设置DependentBean的dependedBean。春天是怎么做到的?我只是好奇......
答案 0 :(得分:2)
在Java中,您可以使用反射来访问类'私人领域。有关如何完成此操作的更多详细信息,请参阅this Stack Overflow question。
答案 1 :(得分:1)
反射。许多依赖注入框架使用反射在运行时处理类并修改它们的行为。
Class#getDeclaredFields()
返回类中的所有已声明字段的数组(由Field
API包装),包括私有字段。 Field
API允许您检查注释(isAnnotationPresent
,getAnnotation
,getAnnotations
)并设置其当前值(set(Object, Object)
)。