Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller MVC控制器中的自动连线bean为空_Model View Controller_Spring_Autowired - Fatal编程技术网

Model view controller MVC控制器中的自动连线bean为空

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 我完全糊涂了。它有什么作用?它试图在创建控制器实例时创建并注入依赖项。好的,那么如果没有发生错误,为什么

我试图在MVC控制器类中自动连接一个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()); } }