我正在一个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

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

10-11 05:12