Spring Boot如何将bean自动装配到另一个没有私有属性访问器方法的类?

时间:2016-05-01 12:59:23

标签: java spring

我刚刚开始学习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。春天是怎么做到的?我只是好奇......

2 个答案:

答案 0 :(得分:2)

在Java中,您可以使用反射来访问类'私人领域。有关如何完成此操作的更多详细信息,请参阅this Stack Overflow question

答案 1 :(得分:1)

反射。许多依赖注入框架使用反射在运行时处理类并修改它们的行为。

Class#getDeclaredFields()返回类中的所有已声明字段的数组(由Field API包装),包括私有字段。 Field API允许您检查注释(isAnnotationPresentgetAnnotationgetAnnotations)并设置其当前值(set(Object, Object))。