gpt4 book ai didi

java - Spring Boot 在配置问题中定义 bean

转载 作者:行者123 更新时间:2023-11-29 08:26:04 25 4
gpt4 key购买 nike

我在业余时间从事一个项目,在这个项目中我被要求使用 Spring Boot。我以前不熟悉 Spring Boot,我尝试在 stackoverflow 和 Google 上搜索这里,但我似乎无法理解针对我的问题的不同解决方案是如何工作的。

首先,这是我的错误信息:

Parameter 0 of constructor in com.project.example.controller.VerverController required a bean of type 'com.project.example.dao.VerverDao' that could not be found.

Action:

Consider defining a bean of type 'com.project.example.dao.VerverDao' in your configuration.

经过一番阅读,我了解到这可能是因为 Spring Boot 不扫描此类/接口(interface)。所以我尝试添加 ComponentScan,但没有成功。

我尝试将 VerverDao 从接口(interface)转换为类,并使用 bean 注释注册一个 bean。仍然没有运气。我试图将 VerverDao 从 dao 包移动到根包(与 Main 类相同),但仍然没有成功。

因此,如果有人可以帮助我理解错误消息,那将让我开心。

这是我的结构:

project structure

这是我的代码:

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

主.java

@ComponentScan("com.gambinomafia")
@SpringBootApplication
public class Main extends SpringBootServletInitializer {
public static void main(String[] args) {
new Main().configure(new SpringApplicationBuilder(Main.class)).run(args);
}
}

配置.java

@Component
public class Configuration extends ResourceConfig {
public Configuration() {
register(VerverResourceImpl.class, VerverResource.class);
register(VerverController.class);
register(VerverDao.class);
}
}

服务器资源.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);
}
}

VerverController.java

@Controller
@AllArgsConstructor
public class VerverController {
private VerverDao ververDao;

public String getRefferingUrl(int userid) {
User user = ververDao.getUsername(userid);

if (user.getUsername().isEmpty()) {
throw new NotFoundException("Did not find any user with id " + userid);
}

return "<url-to-site>/?verv=" + user.getUsername();
}
}

VerverDao.java

@AllArgsConstructor
public class VerverDao {
@Value("spring.datasource.url")
private String dbcon;

public User getUsername(int userid) {
Jdbi jdbi = Jdbi.create(dbcon);

return jdbi.withHandle(handle -> handle.createQuery(
"SELECT id, brukernavn FROM t_user WHERE id = :id")
.bind("id", userid)
.mapToBean(User.class)
.findOnly());
}
}

如果主题中缺少某些信息,请随时询问更多信息。我会尽快回答。

最佳答案

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

@ComponentScan("com.gambinomafia")
@SpringBootApplication

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

@ComponentScan("com.project.example")
@SpringBootApplication

编辑:@M.Deinum 使用 @ComponentScan

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

其次,您可以使用存储库来代替 DAO。这里有更多信息:Spring Boot Repositories .

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

@Controller
public class VerverController
private VerverDao ververDao;

@Autowired
public VerverController(VerverDao ververDao) {
this.ververDao = ververDao;
}
}

还有更多信息here .

关于java - Spring Boot 在配置问题中定义 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53028009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com