为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot在配置问题中定义bean

Spring Boot在配置问题中定义bean

蝴蝶刀刀 2021-12-10 17:06:30
我在业余时间从事一个项目,在这个项目中,我被要求使用 Spring Boot。我以前不熟悉 Spring Boot,我尝试在 stackoverflow 和 Google 上搜索,但我似乎无法理解针对我的问题的不同解决方案是如何工作的。首先,这是我的错误信息:com.project.example.controller.VerverController 中构造函数的参数 0 需要一个无法找到的类型为“com.project.example.dao.VerverDao”的 bean。行动:考虑在您的配置中定义一个“com.project.example.dao.VerverDao”类型的 bean。经过一番阅读,我明白这可能是因为 Spring Boot 不扫描此类/接口。所以我尝试添加 ComponentScan,但没有成功。我试图将 VerverDao 从接口转换为类并使用 bean 注释注册一个 bean。仍然没有运气。我试图将 VerverDao 从 dao 包移动到根包(与 Main 类相同),但仍然没有运气。因此,如果有人可以帮助我理解错误消息,那将是我的一天。这是我的结构:这是我的代码:可能有些注释也是错误的,因为我不习惯 Spring Boot,在此先感谢您纠正我对这些的使用。 另外值得一提的是,我在这个项目中也使用了 Lombok。主程序@ComponentScan("com.gambinomafia")@SpringBootApplicationpublic class Main extends SpringBootServletInitializer {    public static void main(String[] args) {        new Main().configure(new SpringApplicationBuilder(Main.class)).run(args);        }    }配置文件@Componentpublic class Configuration extends ResourceConfig {    public Configuration() {        register(VerverResourceImpl.class, VerverResource.class);        register(VerverController.class);        register(VerverDao.class);    }}VerverResource.java@Resource@Path("verver")public interface VerverResource {    @GET    @Path("/{userid}")    @Produces(MediaType.APPLICATION_JSON)    String getRefferingUrl(@PathParam("userid") int userid);}VerverResourceImpl.java@AllArgsConstructor(onConstructor = @__({@Inject}))public class VerverResourceImpl implements VerverResource {    private VerverController controller;    @Override    public String getRefferingUrl(int userid) {        log.info("Collection reciever url for user id: {}", userid);        return controller.getRefferingUrl(userid);    }}
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

首先,您@ComponentScan在 Application 类中设置了一个错误的包。


@ComponentScan("com.gambinomafia")

@SpringBootApplication

而且,根据图片,它必须是:


@ComponentScan("com.project.example")

@SpringBootApplication

编辑:@ComponentScan@M.Deinum的使用


由于Application类在根包中并且@SpringBootApplication已经包含了@ComponentScan,所以不需要声明@ComponentScan。


其次,您可以使用 Repositories,而不是使用 DAO。这里有更多信息:Spring Boot Repositories。


第三,要注入您可以@Autowired在构造函数上使用的对象。


@Controller

public class VerverController

    private VerverDao ververDao;


    @Autowired

    public VerverController(VerverDao ververDao) {

        this.ververDao = ververDao;

    }

}

有更多的信息在这里。


查看完整回答
反对 回复 2021-12-10
?
白衣非少年

TA贡献1155条经验 获得超0个赞

日志清楚地说


VerverController 需要一个无法找到的类型为“com.project.example.dao.VerverDao”的 bean。


这意味着没有类型的bean com.project.example.dao.VerverDao


添加@Repository在顶部VerverDao以解决问题。


@Repository

@AllArgsConstructor

public class VerverDao {


}

注意:确保 VerverDao 根据您的包结构在组件扫描路径中。


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 251 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信