MVC ControllerクラスでBeanをオートワイヤリングしようとしていますが、null以外の値を取得できません。 beanのコンストラクタにthrow new Error("E")
を入れて、helloWorldController
beanに注入すると、例外が発生します。helloWorldControllerという名前のBeanを作成中にエラーが発生しました:autowired依存関係の注入が失敗しました。しかし、私がエラーコンストラクタなしでテストを実行すると、私はBeanを取得しない、私はnullを取得します。Autowired BeanはMVCコントローラで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; } }
Beanは任意の空のインターフェイスを実装:
package testy.sprung.beany; public class AwiredBeanImpl implements AwiredBean { @Override public String toString() { return "CommonAutowired"; } public AwiredBeanImpl() { throw new Error("E"); } }
は、私がテスト内でそれを実行します。私のエラーまたはNullPointerException
天気を投げているのでテストは、失敗します。それはSpring管理Beanになるように
@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()); } }
コントローラクラスと関連するビット設定を表示してください –
[なぜ私のSpring @Autowiredフィールドはnullですか?](http://stackoverflow.com/questions/19896870/why-is-my-spring -autowired-field-null) – chrylis