spring在web环境中,java代码里需要得到ApplicationContext; 根据前期配置的不同,有两种方式:
(1)spring加载放到web.xml中配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
则得到ApplicationContext用如下方式:
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(Servlet Context);
java代码中调用 ctx.getBean(String beanId);
(2) 直接声明:
public class BeanManager {
private static ApplicationContext context = new ClassPathXmlApplicationContext("appcontext.xml") ;
public static Object getBean(String beanId) {
return context.getBean(beanId);
}
}
在web.xml中写一个servlet,自动启动,init方法中调用一下BeanManager
init() throws ServletException {
BeanManager bm = new BeanManager();//可选的,为的是在web应用启动的时候就让spring加载bean配置。
// 否则会在第一次调用BeanManager的时候加载,影响一次速度。
}
在java代码中使用 BeanManager.getBean(String beanId); 来获得bean实例。
优缺点分析:
第一种方式不利于需要在web容器下进行,不利于测试;
第二种方法与web容器无关,单元测试方便;
问题:
请问各位在项目中,更多应用那一种方式在创建 spring 容器。原因是什么,有时间的仁兄麻烦给分析一下优缺点。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:/spring-core.xml")
public class UserServiceTest{
@Resource
UserService service;
/**
* 保存测试
*/
@Test
public void testSave(){
User user = new User();
service.save(user);
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。