Spring学习笔记(一):眼见为实,先上一个简单例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jin_Kwok/article/details/82777099

概述

所谓眼见为实,Spring虽然是一个轻量级的框架,但涉及众多的概念,理解起来并不容易,因此,先参考资料写一个简单的Demo,从中洞见Spring的大体工作流程,为后面深入学习做铺垫。

本文的Demo很简单:模拟图书数据访问服务,即向数据库中添加图书信息,涉及IBookDAO接口与BookDAO实现类。

一、环境准备

1. JDK 1.8及以上;

2. Maven 3.5及以上

3. IDE,Eclipse,IntelliJ IDEA 等,本文采用Eclipse

二、创建一个Maven工程

第一步:在pom文件中添加必要的依赖:既然要使用Spring,自然要添加相关的依赖包,如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.yingshulan.spring</groupId>
  <artifactId>spring-learning</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>spring-learning</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.3.0.RELEASE</spring.version>
  </properties>
   <profiles>
        <profile>
            <id>JDK1.8</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <encoding>UTF-8</encoding>
            </properties>
        </profile>
  </profiles>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>${spring.version}</version>
     </dependency>
     <dependency>
       <groupId>org.aspectj</groupId>
       <artifactId>aspectjweaver</artifactId>
       <version>1.8.9</version>
     </dependency>
     <dependency>
       <groupId>cglib</groupId>
       <artifactId>cglib</artifactId>
       <version>3.2.4</version>
     </dependency>
  </dependencies>
</project>

第二步:DAO层源文件创建:创建IBookDAO接口与BookDAO实现类,仅作为简单示例,因此只包含一个方法,如下所示:

package com.yingshulan.spring_learning.api;

public interface IBookDAO
{
    /**
     * 添加图书
     */
    public String addBook(String bookname);
}
package com.yingshulan.spring.spring_learning;

import com.yingshulan.spring_learning.api.IBookDAO;

/**
 * 图书数据访问实现类,访问数据库不是本文的重点,为简单起见,这里只是模拟访问数据库
 * 并没有真正存储图书信息到数据库中。
 */
public class BookDAO implements IBookDAO
{

    
    public String addBook(String bookname)
    {
        // write book information to data base
        // ...
        // 模拟写图书信息到数据库成功,返回提示信息
        return "添加图书" + bookname + "成功!";
    }
}

第三步:Service层源文件创建:创建一个BookService类,如下:

package com.yingshulan.spring.spring_learning;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yingshulan.spring_learning.api.IBookDAO;

public class BookService
{

    private IBookDAO bookDAO;

    public BookService()
    {
        // 第一步: 使用框架 API ClassPathXmlApplicationContext() 来创建应用程序的上下文。
        // 这个 API 加载 beans 的配置文件并最终基于所提供的 API,它处理创建并初始化所有的对象,
        // 即在配置文件中提到的 beans。
        ApplicationContext ctx = new ClassPathXmlApplicationContext("IOCBeans01.xml");
        
        // 第二步是使用已创建的上下文的 getBean() 方法来获得所需的 bean。
        // 这个方法使用 bean 的 ID 返回一个最终可以转换为实际对象的通用对象。一旦有了对象,
        // 你就可以使用这个对象调用任何类的方法。
        bookDAO = (IBookDAO) ctx.getBean("bookdao");
    }

    /**
     * Service层: 调用DAO层的方法写信息到数据库
     * @param bookname
     */
    public void storeBook(String bookname)
    {
        System.out.println("增加图书信息到数据库");
        String result = bookDAO.addBook(bookname);
        System.out.println(result);
    }
}

第四步:为Bean创建配置文件:即第三步代码中的 “IOCBeans01.xml”,该文件是一个 XML 文件,这个文件需要在 src 目录(按照规范,一般在src/resource目录)下创建。通常开发人员保存该文件的名称为 Beans.xml 文件,当然你也可以设置成任何你喜欢的名称。但是你必须确保这个文件在 CLASSPATH 中是可用的,并在主应用程序中使用相同的名称。

Beans.xml 用于给不同的 bean 分配唯一的 ID(本例中只定义了一个bean,id为 “bookdao”),并且控制对象的创建,而不会影响 Spring 的任何源文件。例如,使用下面的文件,事实上定义了一个BookDAO类的bean,由于BookDAO类没有属性,构造方法也是默认的,因此,bean的定义没有涉及属性,后面我们将介绍更复杂的bean的定义。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="bookdao" class="com.yingshulan.spring.spring_learning.BookDAO"></bean>
</beans>

工作流程:

当 Spring 应用程序被加载到内存中时,框架利用了上面的配置文件来创建所有已经定义的 beans,并且按照标签的定义为它们分配一个唯一的 ID。你可以使用标签来传递在创建对象时使用不同变量的值。这些beans被创建后存在于Spring容器中,应用程序可以通过ID获取bean,bean本质上是对象,既然获取了bean,自然就能够调用bean的方法。

第五步:创建测试类,运行程序:创建一个测试类,调用Service层方法进行测试,如下:

package com.yingshulan.spring.spring_learning;


public class AppTest
{
    public static void main(String[] args)
    {
        BookService bookservice = new BookService();
        bookservice.storeBook("《深入浅出理解 Spring 3.X 精要》");
    }
}

运行结果:

增加图书信息到数据库
添加图书《深入浅出理解 Spring 3.X 精要》成功!

猜你喜欢

转载自blog.csdn.net/Jin_Kwok/article/details/82777099