• Spring(一)传统的基于JUtil的测试环境的问题以及Spring中的容器


    传统的基于JUtil的测试环境的问题:
        每次启动都要手动的去调用Spring的工厂方法开启Spring,而运行完成之后又不去关闭Spring
        
    基于Spring的测试的使用:
    1.首先导入基础测试需要的jar:test,aop,expression,context


    2.在测试类上编写注解:@RunWith(SpringJUtil4ClassRunner.class)
        表示Spring给JUnit提供了一个运行环境,其实Spring内部会把当前的测试类当做Spring的一个bean处理,这样Spring就可以在测试文件启动的时候,自动的启动Spring容器

    @RunWith(SpringJUnit4ClassRunner.class)在测试类上写

    3.在@RunWith相同的位置添加注解:@ContextConfiguration,参数填写包括后缀的本模块的xml配置文件的名称
        这个参数可以不写,但是如果不写,则需要按照约定的方式给配置文件起名,这个约定的配置文件名的格式是:
        `TestClassName-context.xml`

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    XML文件名为`测试类名-context.xml`则可以不在@ContextConfiguration后面写否则,必须写上xml文件名(@ContextConfiguration(xml文件))

    4.在测试类中编写一个BeanFactory的字段,并且使用注解@Autowired标注
        表示告诉Spring这个字段就是你默认需要创建的BeanFactory
        这个就是DI:Dependency Injection  依赖注入

        @Autowired
        ApplicationContext appCtx;
        //必须加注释    @Autowired,否则测试的时候会报java.lang.NullPointerException错误

    测试类的整体写法:

    package com.gxxy.spring02;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    public class HelloWorldTest {
        @Autowired
        ApplicationContext appCtx;
        @Test
        public void Springtest() {
            IHelloWorldDAO bean = appCtx.getBean("helloworldBean1", IHelloWorldDAO.class);
            bean.sayHello();
        }
    }

    Container
    一:Spring 中的容器
        Spring容器有BeanFactory和ApplicationContext两种类型
    1.BeanFactory
        BeanFactory是Spring中提供的最简单,最基本的容器;这个容器只提供了Ioc/DI的功能
    2.ApplicationContext:

      也是一个接口,继承了BeanFactory,ApplicationContext容器功能更加全面
          expression:Spring实现的EL表达式,允许在配置文件中使用EL表达式,但是一般不会这么用    
          context:上下文环境

        @Autowired
        AbstractApplicationContext appCtx;
        @Autowired
        BeanFactory factory;

    二:对比
    1.BeanFactory:
        容器启动时不会实例化对象
    2.ApplicationContext:
        容器启动时会实例化对象,也可以通过在bean注解的`lazy-init`属性可以让容器不会去实例化
        也可以在beans添加属性`default-lazy-init`

  • 相关阅读:
    SQLAlchemy 几种查询方式总结
    python的cls,self,classmethod,staticmethod
    从coding.net (git clone)项目代码到本地报403错误 解决方案
    Python中内置数据类型list,tuple,dict,set的区别和用法
    正则表达式基本语法和模式修正
    php中常用正则表达式函数
    js进阶篇之内置对象
    js进阶篇之事件响应,与网页交互
    代码自动化打包系统【原创】
    php内核探索 [转]
  • 原文地址:https://www.cnblogs.com/zhang-bo/p/6627308.html
Copyright © 2020-2023  润新知