首页 > 解决方案 > 为什么我在 SpringBean 的构造函数中初始化的字段为 null?

问题描述

我不明白以下情况。

我有一个名为 DaoPortals 的 Dao 对象,我用 @Repository 注释进行了注释

@Repository
public class DaoPortals implements IDaoPortals{

    private JdbcTemplate jdbcTemplate;

    public DaoPortals(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

它拥有一些不重要的功能。我将这个 bean 注入到另一个名为 DaoCustom 的 Dao 对象中。该对象有一个字段,该字段在 ibjects 构造函数中使用 DaoPortals 对象进行了初始化。

@Repository
public class DaoCustom {

    private final JdbcTemplate jdbcTemplate;
    public final HashMap<Integer, Portal> portals;

    public DaoCustom(JdbcTemplate jdbcTemplate, DaoPortals daoPortals){
        this.jdbcTemplate = jdbcTemplate;
        this.portals = daoPortals.getAll();
    }

我们可以看到 DaoCustom 也是一个 spring bean。当我调试构造函数时,我可以清楚地看到 HashMappublic final HashMap<Integer, Portal> portals使用我期望的值进行了初始化。世界是一个快乐的地方。从这一刻起,我希望这个 spring bean 的字段值是我在构造函数中看到的值....

...只是事实并非如此。

我在任何地方注入门户字段的 DaoCustom Bean null。例如在这个控制器类中。


@Slf4j
@Service
public class GeneralServices {

    private final DaoCustom daoCustom;

    public GeneralServices(DaoCustom daoCustom){
        this.daoCustom = daoCustom;
    }

我没有用new关键字初始化任何东西。一切都应该由 IoC 容器处理。如果 spring 不能识别DaoCustom为 bean,我不能将它放在构造函数中并在其他对象中使用它。DaoCustominside的字段GeneralServices不为空。所以它清楚地识别了bean本身......它只是portals里面的字段值为DaoCustomnull......这个我不明白。有任何想法吗 ??

标签: javaspringinversion-of-controlspring-bean

解决方案


推荐阅读