Model view controller MVC控制器中的自动连线bean为空
我试图在MVC控制器类中自动连接一个bean,但我无法获得除null以外的其他值。当我在要注入Model view controller MVC控制器中的自动连线bean为空,model-view-controller,spring,autowired,Model View Controller,Spring,Autowired,我试图在MVC控制器类中自动连接一个bean,但我无法获得除null以外的其他值。当我在要注入helloWorldControllerbean的bean的构造函数中放入throw new Error(“E”)时,我得到一个异常:创建名为helloWorldController的bean时出错:自动连线依赖项的注入失败。但当我在构造函数中无错误地运行测试时,我没有得到bean,而是得到null 我完全糊涂了。它有什么作用?它试图在创建控制器实例时创建并注入依赖项。好的,那么如果没有发生错误,为什么
helloWorldController
bean的bean的构造函数中放入throw new Error(“E”)
时,我得到一个异常:创建名为helloWorldController的bean时出错:自动连线依赖项的注入失败。但当我在构造函数中无错误地运行测试时,我没有得到bean,而是得到null
我完全糊涂了。它有什么作用?它试图在创建控制器实例时创建并注入依赖项。好的,那么如果没有发生错误,为什么变量没有被取消标记呢
我已根据肖恩·帕特里克·弗洛伊德的要求延长了我的职位:
package testy.sprung;
//import declarations ommited
import testy.sprung.beany.AwiredBean;
@Controller
public class HelloWorldController {
private Logger log = Logger.getLogger("springTestLogger");
@Autowired
private AwiredBean oz;
@RequestMapping("/sprung")
public ModelAndView base() {
log.debug("base URI");
ModelAndView mv = new ModelAndView();
mv.setViewName("firstPage");
return mv;
}
@RequestMapping(value="/{articel}/{subTitle}",method=RequestMethod.GET)
public ModelAndView szia(@PathVariable("articel") String articel, @PathVariable("subTitle") String st, @RequestParam(value="co", required=false) String co) {
log.debug("Path GET/{articel}/{subtitle}: " + articel + "/" + st + "?co=" + co);
ModelAndView mv = new ModelAndView();
mv.setViewName("index"); // now put index.jsp in /WEB-INF/files
mv.addObject("articel", articel);
mv.addObject("subtl", st);
mv.addObject("co", co);
mv.addObject("awir", oz); //but it is null
return mv;
}
}
而不是
controller=newHelloWorldController()代码>您应该注入控制器,使其成为Spring管理的bean。请显示控制器类和Spring配置的相关位。非常感谢。现在可以了。我把测试更新了一点。行controller=newhelloworldcontroller()代码>已被删除,变量控制器
被注释为@Autowired
。
package testy.sprung.beany;
public class AwiredBeanImpl implements AwiredBean {
@Override
public String toString() {
return "CommonAutowired";
}
public AwiredBeanImpl() {
throw new Error("E");
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:WebContent/WEB-INF/sprung-servlet.xml")
public class ZakladniExtendedTest extends TestCase {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
private HelloWorldController controller;
@Inject
private ApplicationContext context;
public ZakladniExtendedTest() {
PropertyConfigurator.configure("t-resources/log4j.properties");
}
@Before //this method is called before each test
public void setUp() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
controller = new HelloWorldController();
}
@Test
public void testThemeResolverExists() { //this test works
assertTrue(context.containsBean("themeResolver"));
}
@Test
public void autowiringTest() throws Exception { //but this not
request.setRequestURI("/title/subtitle");
request.setMethod("GET");
request.setParameter("co", "param");
ModelAndView mav = new AnnotationMethodHandlerAdapter().handle(request, response, controller);
String viewName = mav.getViewName();
Map objects = mav.getModel();
assertEquals("index", viewName);
//NullPointerException follows:
assertEquals("CommonAutowired", objects.get("awir").toString());
}
}