• 【Spring】创建一个Spring的入门程序


    3、创建一个Spring的入门程序

    简单记录 - Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)- Spring的基本应用

    Spring与Spring MVC的关系Spring和Spring MVC两者名字类似,但是两者却有着本质的不同。Spring是一个巨大的容器,可以集成各种技术。Spring MVC是一个Web技术,Spring MVC可以集成到Spring中。用数学上集合的概念来解释,Spring MVC是Spring的一个子集。

    创建一个空白maven项目来实现Spring的入门程序

    在这里插入图片描述

    在这里插入图片描述

    在这个项目中,创建一个名为chapter01的Web项目Module

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    手动导入Jar包(注 : spring 需要导入commons-logging进行日志记录 . )

    但我们可以利用maven , 他会自动下载对应的依赖项 .

    pom.xml

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.23.RELEASE</version>
    </dependency>
    

    https://repo.spring.io/release/org/springframework/spring/

    在这里插入图片描述

    chapter01目录结构

    在这里插入图片描述

    (2)在src/main/java目录下,创建一个com.awen.ioc包,并在包中创建接口UserDao,然后在接口中定义一个say()方法,代码如下所示。

    package com.awen.ioc;
    
    /**
     * @author Liu Awen 
     */
    public interface UserDao {
        public void say();
    }
    
    

    (3)在com.awen.ioc包下,创建UserDao接口的实现类UserDaoImpl,该类需要实现接口中的say()方法,并在方法中编写一条输出语句,代码如下所示。

    package com.awen.ioc;
    
    /**
     * @author Liu Awen
     */
    public class UserDaoImpl implements  UserDao{
        public void say(){
            System.out.println("userDao say hello World!");
        }
    }
    
    

    (4)在src/main/resources目录下,创建Spring的配置文件applicationContext.xml,并在配置文件中创建一个id为userDao的bean,如文件所示。文件 applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--将指定类配置给Spring,让Spring创建其对象的实例    -->
        <bean id="userDao" class="com.awen.ioc.UserDaoImpl"></bean>
    </beans>
    

    在文件 applicationContext.xml中,前面几行代码是Spring的约束配置。该配置信息不需要手写,我们可以去Spring官网找

    https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-basics

    在这里插入图片描述

    也可以在Spring的帮助文档中找到。

    快速获取配置文件的约束信息在Spring的配置文件中,包含了很多约束信息,如果我们自己动手去编写,不但浪费时间,还容易出错。其实,在Spring的帮助文档中,就可以找到这些约束信息,具体的获取方法如下。打开Spring解压文件夹中的docs目录,在spring-framework-reference文件夹下打开html文件夹,并找到index.html文件,如图所示。

    在这里插入图片描述
    图Spring的参考文件目录

    使用浏览器打开index.html后,点击Core

    在这里插入图片描述

    在浏览器页面的下的1.2.1. 小节Configuration Metadata中,即可找到配置文件的约束信息,如图所示。

    在这里插入图片描述
    配置文件的约束信息在图中,标记处的配置信息就是Spring配置文件的约束信息。我们只需将标注处的信息复制到项目的配置文件中使用即可。

    第7行代码表示在Spring容器中创建一个id为userDao的Bean实例,其中class属性用于指定需要实例化Bean的类。

    (5)在src/test/java下,创建测试类TestIoC,并在类中编写main()方法。在main()方法中,需要初始化Spring容器,并加载配置文件,然后通过Spring容器获取userDao实例(即Java对象),最后调用实例中的say()方法,如文件所示。文件 TestIoC.java

    import com.awen.ioc.UserDao;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * @author Liu Awen 
     */
    public class TestIoC {
        public static void main(String[] args) {
            // 1. 初始化Spring容器,加载配置文件
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            // 2. 通过容器获取userDao实例
            UserDao userDao = (UserDao)applicationContext.getBean("userDao");
            // 3.调用实例中的say()方法
            userDao.say();
        }
    }
    
    

    执行程序后,控制台的输出结果如图所示。

    D:Environmentsjdk-11.0.2injava.exe -javaagent:D:JavaideaIU-2019.2.winlibidea_rt.jar=8142:D:JavaideaIU-2019.2.winin -Dfile.encoding=UTF-8 -classpath D:IdeaProjectsJavaEE-enterprise-application-development-tutorialchapter01	arget	est-classes;D:IdeaProjectsJavaEE-enterprise-application-development-tutorialchapter01	argetclasses;D:Environmentsapache-maven-3.6.2maven-repojunitjunit4.11junit-4.11.jar;D:Environmentsapache-maven-3.6.2maven-repoorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-webmvc5.2.3.RELEASEspring-webmvc-5.2.3.RELEASE.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-aop5.2.3.RELEASEspring-aop-5.2.3.RELEASE.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-beans5.2.3.RELEASEspring-beans-5.2.3.RELEASE.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-context5.2.3.RELEASEspring-context-5.2.3.RELEASE.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-core5.2.3.RELEASEspring-core-5.2.3.RELEASE.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-jcl5.2.3.RELEASEspring-jcl-5.2.3.RELEASE.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-expression5.2.3.RELEASEspring-expression-5.2.3.RELEASE.jar;D:Environmentsapache-maven-3.6.2maven-repoorgspringframeworkspring-web5.2.3.RELEASEspring-web-5.2.3.RELEASE.jar TestIoC
    userDao say hello World!
    
    Process finished with exit code 0
    
    

    从运行结果可以看出,控制台已成功输出了UserDaoImpl类中的输出语句。userDao say hello World!

    在TestIoc的main()方法中,并没有通过new关键字来创建UserDao接口的实现类对象,而是通过Spring容器来获取的实现类对象,这就是Spring IoC容器的工作机制。

    Spring容器来完成。

    问题:

    Exception in thread "main" java.lang.ClassCastException: class com.awen.ioc.UserDaoImpl cannot be cast to class com.awen.ioc.UserDao (com.awen.ioc.UserDaoImpl and com.awen.ioc.UserDao are in unnamed module of loader 'app')
    	at com.awen.ioc.TestIoC.main(TestIoC.java:13)
    
    public class UserDaoImpl {
        public void say(){
            System.out.println("userDao say hello World!");
        }
    }
    

    解决原来是我写UserDaoImpl没有implements UserDao接口 , 那就加上吧。搞定

    public class UserDaoImpl implements  UserDao{
        public void say(){
            System.out.println("userDao say hello World!");
        }
    }
    
  • 相关阅读:
    POJ3693 Maximum repetition substring —— 后缀数组 重复次数最多的连续重复子串
    SPOJ
    POJ2774 Long Long Message —— 后缀数组 两字符串的最长公共子串
    POJ3261 Milk Patterns —— 后缀数组 出现k次且可重叠的最长子串
    POJ1743 Musical Theme —— 后缀数组 重复出现且不重叠的最长子串
    SPOJ
    AC自动机小结
    HDU3247 Resource Archiver —— AC自动机 + BFS最短路 + 状压DP
    POJ1625 Censored! —— AC自动机 + DP + 大数
    Herding
  • 原文地址:https://www.cnblogs.com/liuawen/p/12310604.html
Copyright © 2020-2023  润新知