gpt4 book ai didi

java - 使用 Pojo 而不是 Rest Controller 时 Spring 服务注入(inject)为 Null

转载 作者:行者123 更新时间:2023-12-02 04:18:06 26 4
gpt4 key购买 nike

我正在尝试使用 Spring 和 Jhipster 访问某些数据库。我想使用一项服务,通过注入(inject)。

当使用rest Controller 时,我没有问题,但是当我尝试在pojo中使用注入(inject)的服务时,该服务为空。

@RestController
public class TheRestController {

@Autowired
protected TheService theService;

@RequestMapping("/test")
public void test() {

if (theService == null) {
System.out.println("rest : null");
}
{
System.out.println("Rest : service is not null");
}

System.out.println("Call Pojo ");

Pojo pojo = new Pojo();
pojo.process();
}
}

该服务不为空,可用于访问数据库。但是当我尝试在其余 Controller 中或直接在 main() 中使用 Pojo 时,Service 为 null。

我的 Pojo 与 Rest Controller 完全相同:

public class Pojo  {

@Autowired
protected TheService theService; // this one is allways null.

public void process(){
if (theService == null){
System.out.println( "POJO : null" );
}else{
System.out.println("POJO : service is not null");
}
}
}

发送请求时,我有输出:

Rest : service is not null
Call Pojo
POJO : null

我尝试使用@Autowired、@Resource 和@Inject,结果相同。

如何访问 Pojo 中的 theService(而不总是将其作为参数传递)?

最佳答案

Spring容器只能管理在该容器内创建的bean(对象) - 如果您使用new关键字创建一个对象,Spring无法注入(inject)依赖项(它甚至不知道对象存在)。如果您想在 main() 中使用依赖项,您必须:

  • 在 Spring 配置中声明 Pojo,或者注释为 @Component@Service

  • 在主目录中创建一个新的 Spring 容器:

    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
    context.register("path.to.your.package");
    context.refresh();
  • 获取 Pojo 的(Spring 管理的)实例:

    Pojo myPojo = context.getBean(Pojo.class);

关于java - 使用 Pojo 而不是 Rest Controller 时 Spring 服务注入(inject)为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33083856/

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