Spring Boot在配置问题中定义bean

我在业余时间从事一个项目,在这个项目中,我被要求使用 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 类相同),但仍然没有运气。

因此,如果有人可以帮助我理解错误消息,那将是我的一天。

这是我的结构:

http://img2.mukewang.com/61b318b10001835002720333.jpg

这是我的代码:


可能有些注释也是错误的,因为我不习惯 Spring Boot,在此先感谢您纠正我对这些的使用。 另外值得一提的是,我在这个项目中也使用了 Lombok。


主程序


@ComponentScan("com.gambinomafia")

@SpringBootApplication

public class Main extends SpringBootServletInitializer {

    public static void main(String[] args) {

        new Main().configure(new SpringApplicationBuilder(Main.class)).run(args);

        }

    }

配置文件


@Component

public 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);

    }

}


蝴蝶刀刀
浏览 252回答 2
2回答

SMILET

首先,您@ComponentScan在 Application 类中设置了一个错误的包。@ComponentScan("com.gambinomafia")@SpringBootApplication而且,根据图片,它必须是:@ComponentScan("com.project.example")@SpringBootApplication编辑:@ComponentScan@M.Deinum的使用由于Application类在根包中并且@SpringBootApplication已经包含了@ComponentScan,所以不需要声明@ComponentScan。其次,您可以使用 Repositories,而不是使用 DAO。这里有更多信息:Spring Boot Repositories。第三,要注入您可以@Autowired在构造函数上使用的对象。@Controllerpublic class VerverController    private VerverDao ververDao;    @Autowired    public VerverController(VerverDao ververDao) {        this.ververDao = ververDao;    }}有更多的信息在这里。

白衣非少年

日志清楚地说VerverController 需要一个无法找到的类型为“com.project.example.dao.VerverDao”的 bean。这意味着没有类型的bean com.project.example.dao.VerverDao添加@Repository在顶部VerverDao以解决问题。@Repository@AllArgsConstructorpublic class VerverDao {}注意:确保 VerverDao 根据您的包结构在组件扫描路径中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java