簡體   English   中英

為什么只有從其他類調用sub()方法時,“ this.personService”才為null?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM