gpt4 book ai didi

java - @Autowired 在 Spring 中失败

转载 作者:行者123 更新时间:2023-12-01 18:29:30 24 4
gpt4 key购买 nike

各位,
我正在尝试使用 Spring DI 和 MVC (版本 3.2.x )设置项目。我尝试注入(inject)服务实现,但在某些时候会失败。不会引发任何异常。只是服务对象在预期的地方为空。下面是代码。

package com.test.domain.web.controller;
.........
@Controller
@RequestMapping(value = "/system/**")
public class InformationController {
@RequestMapping(value = "/classing/{id}", method = RequestMethod.GET)
public ModelAndView getBaleClassing(@PathVariable String id, Model model, HttpServletRequest request) {
LOG.info("In the system classing...");
InformationModel informationModel = new InformationModel();
model.addAttribute("informationModelVO",informationModel.getResult(id));
return new ModelAndView(SYSTEM_CLASSING_TILE);
}

}


这是业务的模型类。我还尝试在 setter 方法上注释 @Autowired 。但没有运气。

package com.test.domain.classing.model;
.........
public class InformationModel {

@Autowired
InformationService informationService;

public InformationVO getResult(String id) {
InformationVO informationVO = null;
try {
informationVO = informationService.getInformationById(id); //informationService is null here
} catch (ServiceException e) {
LOG.error("Exception: ", e);
}
return informationVO;
}

public InformationService getInformationService() {
return informationService;
}

public void setInformationService(InformationService informationService) {
this.informationService = informationService;
}
}


这是我的服务实现,唯一符合条件的候选者。我依靠 Spring 来实例化,并且我自己不会在任何地方实例化服务或 DAO 实现。

package com.test.domain.classing.service;
.......
public class InformationServiceImpl implements InformationService {

@Autowired
private InformationDAO informationDAO;

public InformationServiceImpl() {
LOG.debug("In the InformationServiceImpl default constructor....");
}

public InformationVO getResult(String id) throws ServiceException {
InformationVO informationVO = informationDAO.getResult(id);
return informationVO;
}

public InformationDAO getInformationDAO() {
return informationDAO;
}

public void setInformationDAO(InformationDAO informationDAO) {
this.informationDAO = informationDAO;
}
}

并且,这是 spring 配置(包含 service 和 dao)。我没有在 spring 配置中添加 InformationModel,因为我每次都需要新的实例。

applicationContext.xml

<小时/>
..........
<context:annotation-config />
<context:component-scan base-package="com.test.domain, com.test.domain.classing.model, com.test.domain.classing.service, com.test.domain.web.controller" />

<bean name="com.test.domain.classing.service.InformationService" class="com.test.domain.classing.service.InformationServiceImpl">
</bean>

<bean name="com.test.domain.classing.dao.InformationDAO" class="com.test.domain.classing.dao.InformationDAOImpl">
</bean>
..........

mvcContext.xml

<小时/>
<context:component-scan base-package="gov.usda.fsa.pscao.clg.cops.web.controller" />
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />


从日志中,我可以说 DAO 和服务的实现已实例化。但没有任何 Autowiring 发生。即,将 DAO 注入(inject)到服务中或将服务注入(inject)到模型中。有没有办法在 spring 尝试注入(inject)时进行调试(如果是的话,就我而言)?

非常感谢任何指点。提前致谢。

最佳答案

RPaul 是对的,

试试这个:

@Controller
@RequestMapping(value = "/system/**")
public class InformationController {

@Autowired
InformationModel informationModel;

@RequestMapping(value = "/classing/{id}", method = RequestMethod.GET)
public ModelAndView getBaleClassing(@PathVariable String id, Model model, HttpServletRequest request) {
LOG.info("In the system classing...");
model.addAttribute("informationModelVO",informationModel.getResult(id));
return new ModelAndView(SYSTEM_CLASSING_TILE);
}

}

并且,

@Component
public class InformationModel {
....
}

还有这个

@Service
public class InformationServiceImpl implements InformationService {
...
}

祝你好运!

关于java - @Autowired 在 Spring 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24917378/

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