[英]Why is the “this.personService” is null only when the sub() method is called from other class?
我正在一个Java Spring MVC项目。
在控制器类之一中
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();
....
}
当我从浏览器访问子方法时,上面的this.personService不为null。
但是在另一个类中,我按如下方式调用sub方法
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为您注入它(尽管永远不要从服务访问控制器)
2)您应该将逻辑从sub
方法迁移到PersonService
的方法,并从Controller中的sub
方法(也可以直接从服务)调用此方法
一些进一步的细节,
您的PersonService是一个Spring bean,这意味着无论何时要使用它,都应让框架通过@Autowire
注入它,否则它将为null。
服务层应该引用其他服务或DAO bean,奇怪的是您在PersonService
使用PersonServiceImpl
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.