我对Spring很新,我使用Craig Walls的“Spring in Action”(第四版)进行学习。兴趣不仅在于如何编写正在工作的代码,还取决于使用Spring的正确原则。当使用由构造函数调用创建的Spring bean可以接受时,是否有任何用例?
关于从第142页下面的一段代码,清单5.6:
public class HomeControllerTest {
@Test
public void testHomePage() throws Exception {
HomeController controller = new HomeController();
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get("/")).andExpect(view().name("home"));
}
}
我的问题是由以下的想法产生:
- 一般的理解是,Spring使用依赖注入作为减少对象依赖关系的管理开销,增加模块性,简化测试和代码重用。但是,这不意味着bean必须由容器创建和管理吗?自从我开始阅读这个主题后,我记住的第一个细节表明,
new
不应出现在遵循DI的一段精心编写的代码中。 - 如果我们想测试一个
Stateful
bean,这可能是一个解决方案吗?我的意思是,如果有多个独立测试在同一个实例上运行,那么每个测试都会测试相同的bean状态。尽管我发现这样做有一个合适的注释(@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
)。 - 是否还有另一个难以或无法解决的使用案例(使用
new
除外)?
一个更多'到信'的实施将使用@ContextConfiguration
来指定ApplicationContext
。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebConfig.class)
@WebAppConfiguration
public class HomeControllerTest {
@Autowired
HomeController controller;
@Test
public void testHomePage() throws Exception {
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get("/")).andExpect(view().name("home"));
}
}
*是否有另一个用例很难或无法解决否则*。这是什么意思? – CKing
@CKing我的意思是:是否有任何情况下,我们没有替代品,我们必须使用显式构造函数(如bean = new Bean(...))创建bean。在书中的例子和问题#2中,我找到了替代方案,所以我想知道是否还有其他情况,新方法是解决某个问题的唯一方法。 – aUserHimself