gpt4 book ai didi

java - 为什么只有当从其他类调用 sub() 方法时 "this.personService"才为 null?

转载 作者:行者123 更新时间:2023-12-02 03:46:47 26 4
gpt4 key购买 nike

我正在开发一个 Java Spring MVC 项目。

在 Controller 类之一中

PersonController.java

@Controller
@SessionAttributes({ "mob_Number"})
public class PersonController {

private static final Logger logger = LoggerFactory.getLogger(PersonController.class);

private PersonService personService;

@Autowired(required=true)
@Qualifier(value="personService")
public void setPersonService(PersonService ps){
this.personService = ps;
}

public PersonController(PersonService personService){
this.personService = personService;
}


public PersonController(){

}

....

@RequestMapping(value="/sub",method = RequestMethod.POST, headers = "Accept=application/json")
@ResponseBody
public String sub(@RequestBody String json){


List result = this.personService.getNumber();

....
}

当我从浏览器访问 sub 方法时,上面的 this.personService 不为 null。

但是在另一个类中,我调用子方法如下

PersonServiceImpl.java

@Service
public class PersonServiceImpl implements PersonService, UserDetailsService {

private static final Logger logger = LoggerFactory.getLogger(PersonServiceImpl.class);


private PersonDAO personDAO;

private PersonService personService;

public void setPersonDAO(PersonDAO personDAO) {
this.personDAO = personDAO;
}

PersonController personController = new PersonController(personService);

String res = personController.sub(codeJSON.toString());

....

}

如果通过上述方法完成,“this.personService”将返回 null。

1) 为什么会发生这种情况?2)如何解决这个问题?

最佳答案

1) 您正在实例化 PersonController bean,而不是让 Spring 为您注入(inject)它(尽管您永远不应该从服务访问 Controller )

2) 您应该将逻辑从 sub 方法迁移到 PersonService 内的方法,并从 sub 调用此方法 Controller 中的方法,也直接来自服务

一些进一步的细节,

你的PersonService是一个spring bean,这意味着每当你想使用它时,你应该让框架通过例如注入(inject)它@Autowire,否则将为空。

服务层应该引用其他服务或 DAO bean,在 PersonServiceImpl 中使用 PersonService 很奇怪

关于java - 为什么只有当从其他类调用 sub() 方法时 "this.personService"才为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36216318/

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