首页 专题 文章 代码 归档
Spring第一个测试
2020.01.22 12:05 2020.01.22 12:08

基础架构

截图-1579569605

创建Java项目

由于我们这里只是单独测试Spring的某些功能,所以普通的Java项目即可了,不用创建web app之类的项目!

演示使用的是Intellij IDEA,也强烈建议您使用IDEA,当您熟悉后,相信您一定会爱上他的!

创建新的Java项目

截图-1579570941

选择项目位置:

截图-1579570978

新建lib目录:

截图-1579571041

lib目录与默认的src目录同级!

导入jar包

1、

我们需要导入4个Spring核心包:spring-beans-5.2.3.RELEASE.jarspring-context-5.2.3.RELEASE.jarspring-core-5.2.3.RELEASE.jarspring-expression-5.2.3.RELEASE.jar

以上4个jar包在“Spring包的下载”章节已经介绍过如何下载,请看此章节!

2、

除了spring的核心包,我们还需要一个Apache的日志包, Apache Commons Logging

Tips:

对于新手用户,我们严重不建议使用Maven管理依赖,应该从基础开始学习!

截图-1579571441

所以此时,lib目录下应该是:

截图-1579571487

选中,添加到库:

截图-1579571536

Tips:

对于Eclipse用户,请将其添加到Build Path!

建立配置

建立配置目录

在src同级下,新建conf目录,并右键:

截图-1579571743

建立spring配置文件

在conf目录下,建立配置文件:spring-ioc.xml

截图-1579571862

以后关于类的管理,我们都在此文件里面配置给spring了!

Student 类

在src目录下,新建一个包(名:bean),包下新建一个类:

public class Student {
    private String name;
    private String sno;

    public Student() {
    }

    public Student(String name, String sno) {
        this.name = name;
        this.sno = sno;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sno='" + sno + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }
}

配置spring-ioc.xml

新增一个bean,管理Student类:

<!--    注册一个Student类-->
<bean id="student01" class="com.misiai.bean.Student">
    <!--class告诉容器bean注册的是类的全限定类名,需要根据自己的包名更改-->
    <property name="name" value="kuan"/>
    <property name="sno" value="10001"/>
    <!--property为属性赋值-->
</bean>

新建test

新建test包

教程中的包的结构:

截图-1579572365

新建test包,然后创建Test01类。

添加Junit

如果我们直接在方法上添上@Test注释,会报错!

截图-1579572407

这时候,光标移到错误上,按住Alt+Enter,出现如上图的提示,然后到如classpath

截图-1579572538

然后我们的Lib下,多了一个包:

截图-1579572569

也不报红啦:

截图-1579572609

Tips:

这就是IDEA的强大之处,该Jar包是idea从Maven上帮我们下载的!

测试

/**
 * Spring的基础测试
 */
@Test
public void test01() {
    /*该类是属于:org.springframework.context包下的,代表IOC容器,*/
    ApplicationContext ap = new ClassPathXmlApplicationContext("spring-ioc.xml");
    /*spring-iox.xml是我们之前编写的配置文件*/
    Student student01 = (Student) ap.getBean("student01");
    /*student01是我们之前bean下定义的id*/
    System.out.println(student01.getName());
}

结果:

截图-1579572991

测试成功!

几个问题

  1. 我们之前是把conf(spring-ioc.xml所在的目录)目录标记为Resource ROOT了,不然可能是报错的!

    原因是我们在ClassPathXmlApplicationContext("spring-ioc.xml");是直接写的spring-ioc.xml的文件名,可没给他路径!!!

  2. commons-logging包是需要我们手动下载的,然后倒入Lib目录,再标记为类库!

  3. Junit包是我们通过IDEA在Maven自动下载到lib目录的,我们也可以手动下载该Junit包,然后进行和2一样的步骤!

    Junit是我们进行单元测试所需要的包,其实我们也可以直接在main方法里面测试。

几个细节

  1. ApplicationContext:有两个实现类:

    截图-1579573670

    即:FileSystemXmlApplicationContextClassPathXmlApplicationContext

    顾名思义,FileSystem是要给出配置文件的在文件系统下的路径,而ClassPath只需要给出类目录下的路径。

    在上面的案例中,我们的spring-ioc.xml是在类路径的根下,所以我们只写了配置文件的文件名!

    这点可以在构建了的目录下,可以确定:

    截图-1579573897

  2. Student对象什么时候创建完毕?

    我们知道,现在对象由Spring的容器帮我们创建,那么他什么时候创建完毕了的?

    我们为Student的无参构造输出一句话:

    public Student() {
        System.out.println("Student的无参构造!");
    }

    修改单元测试函数:

     @Test
     public void test01() {
         /*该类是属于:org.springframework.context包下的,代表IOC容器,*/
         ApplicationContext ap = new ClassPathXmlApplicationContext("spring-ioc.xml");
         /*spring-iox.xml是我们之前编写的配置文件*/
         System.out.println("在getBean之前输出这句话");
         Student student01 = (Student) ap.getBean("student01");
         /*student01是我们之前bean下定义的id*/
         System.out.println("在student01.getName之前输出这句话");
         System.out.println(student01.getName());
         System.out.println(student01);
     }

    结果:

    截图-1579574094

    结论:

    在Spring的容器创建的时候,就创建了Student类!

  3. 单例还是多例

    @Test
    public void test01() {
        /*该类是属于:org.springframework.context包下的,代表IOC容器,*/
        ApplicationContext ap = new ClassPathXmlApplicationContext("spring-ioc.xml");
        /*spring-iox.xml是我们之前编写的配置文件*/
        // System.out.println("在getBean之前输出这句话");
        Student st1 = (Student) ap.getBean("student01");
        Student st2 = (Student) ap.getBean("student01");
        System.out.println(st1 == st2);
        /*student01是我们之前bean下定义的id*/
        // System.out.println("在student01.getName之前输出这句话");
        // System.out.println(student01.getName());
        // System.out.println(student01);
    }

    截图-1579575019

    结论:是单例的!

  4. 没有配置该类呢?

    报错:

    org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'student03' available
  5. JavaBean的property属性名由什么决定?

    由setter方法名决定(去掉set)

    如果我修改为setLame

    截图-1579575262

    那么配置文件里面:

    截图-1579575290

    报红!!!

结束

好啦,第一个Spring个测试就结束啦!

本节阅读完毕! (分享
二维码图片 扫描关注我们哟