无法自动接线。找不到“ int”类型的bean

时间:2018-07-30 08:48:21

标签: java spring spring-boot

我正在使用Spring Boot,但在理解Bean时遇到了一些麻烦。我被认为可以将Beans替换为new关键字。

我确定仅使用Autowire时,我的Bean不会在对象上创建新实例,并且我的REST应用程序无论如何都将返回用户首先询问的相同响应(即,如果我最初访问url / id / 1,然后访问url / id / 2,则REST响应将与url / id / 1相同)。

我试图通过创建一个@Configuration文件来定义bean来解决这个问题。

@Configuration
public class UserConfig {

    @Autowired
    UserDAO DAO;

    @Bean
    public User getUser(int uid) {
        try {
            return DAO.getUser(uid);
        } catch (SIDException e) {
            return null;
        }
    }
}

但是我在运行时不断收到此错误:Parameter 0 of method getUser in com.application.Config.UserConfig required a bean of type 'int' that could not be found.

我不理解这一点,因为我试图在配置文件中定义Bean。

在我的主文件中,有以下注释:

@SpringBootApplication(scanBasePackages = {"com.application.Config","com.application"})
@ComponentScan({"com.application.Config","com.application"})

如果有帮助,我就在这种情况下使用我的bean:

@Service
public class UserService {

    @Autowired
    private UserDAO DAO;

    public User getUser(int uid) {
        try {
            return DAO.getUser(uid);
        } catch (SIDException e) {
            return null;
        }
    }
}

谢谢:)

2 个答案:

答案 0 :(得分:0)

@Bean注释告诉spring运行方法以实例化某些对象。 Spring需要创建参数uid来调用您的方法,但是它不知道如何实例化uid。所以:

  • 您的int都是常量,因此请将其设为static final。
  • 您的int都是配置,因此将其放入您的 application.properties文件,并使用 @Value(“ $ {path.to.your.property.key}”)注入它。

答案 1 :(得分:0)

当Spring尝试创建一个bean时,它需要知道int uid值。其他答案表明可以解决该异常。

但是您要尝试做的是对Spring的不正确使用。我建议您阅读有关春豆的文章。 thisthis,然后再继续。

您的getUser方法不必是bean,您的dao是bean,这就足够了。您的UserService看起来不错,如果对不同的URL获得相同的结果,则应在UserService.getUser方法中调试uid值。如果uid很好,则在Dao中检查您的查询。