开发者社区> 问答> 正文

spring 在web环境 中 加载 bean 配置文件方式的选择

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 容器。原因是什么,有时间的仁兄麻烦给分析一下优缺点。

展开
收起
a123456678 2016-03-12 18:00:04 2276 0
1 条回答
写回答
取消 提交回答
  • @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);
    }
    

    }

    2019-07-17 19:01:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载