有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在和Spring Boot合作,我在理解Bean方面有点困难。我开始相信bean会取代new关键字

我发现,当使用Autowire时,我的Beans不会在对象上创建新实例,我的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; } } }

谢谢:)

Tags:  

共 (2) 个答案

  1. # 1 楼答案

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

    • 要么你的int是一个常数,所以把它设为静态的final
    • 要么你的int是一个配置,那么把它放到你的 应用属性文件,并使用 @值(${path.to.your.property.key})将其注入
  2. # 2 楼答案

    当Spring试图创建bean时,它需要知道int-uid值。其他答案可能会解决这个例外

    但你试图做的是对弹簧的不当使用。我建议你在继续之前先读一读关于spring bean的书,例如thisthis

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