【问题标题】:Spring annotation based bean injection基于Spring注解的bean注入
【发布时间】:2015-04-17 18:56:24
【问题描述】:

所以这基本上是我想要实现的:将带有构造函数的用户注入 UserClass。但它抛出“未找到默认构造函数”错误。我怀疑如果我将@Autowired 添加到类 User 构造函数中,它期望在那里注入,所以我不确定问题出在哪里。

这个问题可能太基本了,所以您可以将我重定向到较早的此类问题。关于基于注释的 DI 的信息很少。

@Component
public class UserClass {

    public User user;

    @Autowired
    public UserClass(User user) {
        this.user = user; 
    }
}

@Configuration
public class DIconfig {

    @Bean
    public User getUser() {
        return new User('John');
    }
}

@Component
public class User {

    public String name;

    //@Autowired
    public User(String name) {
        this.name = name;
    }
}

感谢您的宝贵时间。

【问题讨论】:

    标签: spring dependency-injection annotations


    【解决方案1】:

    您定义了 User 类的两个 bean,一个使用 @Component,一个使用 @Bean@Bean 的 bean 配置到目前为止还不错,但是 @Component 的 bean 定义确实缺少默认构造函数。每个用 @Component 定义的 bean 必须要么有一个默认构造函数,要么有一个所有依赖项都是自动装配的构造函数。你的 bean 也不是这样。因此,要么添加默认构造函数,要么删除 @Component,然后仅使用 @Bean 方法创建该类的 bean。

    【讨论】:

    • 是的,你是对的。因此,如果我正确理解通过 Bean 和 Component 注入是两种方法。有什么区别?谢谢
    • 结果没有区别,两种方法都创建了相同类型的bean。但是,@Bean 通常用于为类创建 bean,您无法在类上放置 @Component(例如,因为该类来自框架)或者 bean 需要一些自定义初始化。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2016-04-27
    • 2018-02-17
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多