欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring实战第五版(中文版)学习笔记-第一章 Spring起步

程序员文章站 2022-06-12 09:37:07
...

这一章主要讲了三部分内容

  • Spring和Spring Boot的必备知识
  • 初始化Spring项目
  • Spring生态系统概览

有过开发经验的同学都应该清楚随着软件开发的不断发展,Spring框架也在不断的变化着,其中就包括微服务和反应式编程。Spring还通过引入Spring Boot简化自己的开发模式。

不管你是开发以数据库作为支撑的简单Web应用,还是围绕微服务构建一个现代应用,Spring框架都能帮助你达成目标。本章是使用Spring进行现代应用开发的第一步

1.1 什么是Spring

Spring的核心是提供了一个容器 (Container),通常称为Spring应用的上下文(Spring application context),它们会创建和管理应用组件。这些组件也可以称为bean,会在Spring应用上下文中装配在一起,从而形成一个完整的应用程序。这就像砖块、砂浆、木材、管道和电线组合在一起,形成一栋房子似的。我们在第4版中可知道我们的应用对象是生存于Spring容器中的。

将bean装配在一起的行为是通过一种基于依赖注入(dependency injection,DI)的模式实现的。此时,组件不会再去创建它所依赖的组件并管理它们的生命周期,使用依赖注入的应用依赖于单独的实体(容器)来创建和维护所有的组件,并将其注入到需要它们的bean中。通常,这是通过构造器参数和属性访问方法来实现的。

举例来说,假设在应用的众多组件中,有两个是我们需要处理的:库存服务(用来获取库存水平)和商品服务(用来提供基本的商品信息)。商品服务需要依赖于库存服务,这样它才能提供商品的完整信息。图1.1阐述这些bean和Spring应用上下文之间的关系。

                           Spring实战第五版(中文版)学习笔记-第一章 Spring起步

                                             图1.1 应用组件通过Spring的应用上下文来进行管理并实现互相注入

在核心容器之上,Spring及其一系列的相关库提供了Web框架、各种持久化可选方案、安全框架、与其他系统集成、运行时监控、微服务支持、反应式编程以及众多现代应用开发所需的特性。

讲bean注入到Sprng 容器中可以使用xml文件也可以通过Java配置

方式一:xml文件

该xml文件中描述了两个Bean,CmsSubjectServiceImpl和OmsOrderServiceImpl,并且通过构造器参数将CmsSubjectServiceImpl装配到OmsOrderServiceImpl中。

 
<?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">

    <bean id="example1" class="com.macro.mall.service.impl.CmsSubjectServiceImpl"/>
    <bean id="example2" class="com.macro.mall.service.impl.OmsOrderServiceImpl">
        <constructor-arg ref="example1"/>
    </bean>
</beans>

方式二:Java配置

package com.macro.mall.common;


import com.macro.mall.service.impl.CmsSubjectServiceImpl;
import com.macro.mall.service.impl.OmsOrderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {

    @Bean
    public CmsSubjectServiceImpl cmsSubjectService(){
       return new CmsSubjectServiceImpl();
    }
    
    @Bean
    public OmsOrderServiceImpl omsOrderService(){
       return new OmsOrderServiceImpl(cmsSubjectService());
    }
}

其中用的注解

@Configuration注解会告知Spring这是一个配置类,会为Spring应用上下文提供bean。这个配置类的方法使用@Bean注解进行了标注,表明这些方法所返回的对象会以bean的形式添加到Spring的应用上下文中(默认情况下,这些bean所对应的bean ID与定义它们的方法名称是相同的)。

相对于基于XML的配置方式,基于Java的配置会带来多项额外的收益,包括更强的类型安全性以及更好的重构能力。即便如此,不管是使用Java还是使用XML的显式配置,只有当Spring不能进行自动配置的时候才是必要的。

在Spring技术中,自动配置起源于所谓的自动装配(autowiring)和组件扫描(componentscanning)。借助组件扫描技术,Spring能够自动发现应用类路径下的组件,并将它们创建成Spring应用上下文中的bean。借助自动装配技术,Spring能够自动为组件注入它们所依赖的其他bean。

最近,随着Spring Boot的引入,自动配置的能力已经远远超出了组件扫描和自动装配。SpringBoot是Spring框架的扩展,提供了很多增强生产效率的方法。最为大家所熟知的增强方法就是自动配置(autoconfiguration),Spring Boot能够基于类路径中的条目、环境变量和其他因素合理猜测需要配置的组件并将它们装配在一起。

1.2 初始化Spring应用

第五版中使用的是Spring Initializr初始化应用,我直接使用idea来创建的Spring Boot项目

1、创建一个maven项目

Spring实战第五版(中文版)学习笔记-第一章 Spring起步Spring实战第五版(中文版)学习笔记-第一章 Spring起步

2.添加pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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>SpringBootTest</groupId>
    <artifactId>TestDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--打包为jar包-->
    <packaging>jar</packaging>

    <!--Spring boot 为2.0.4版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncodeing>UTF-8</project.build.sourceEncodeing>
        <project.reportint.outputEncoding>UTF-8</project.reportint.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>htmlunit-driver</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 3.创建应用运行类

Spring实战第五版(中文版)学习笔记-第一章 Spring起步

@SpringBootApplication注解明确表明这是一个Spring Boot应用。但是,@SpringBootApplication远比看上去更强大。@SpringBootApplication是一个组合注解,它组合了3个其他的注解

  • @SpringBootConfiguration:该注解声明为配置类。尽管这个类目前还没有太多的配置,但是后续我们可以按需添加基于Java的Spring框架配置。这个注解实际上是@Configuration注解的特殊形式。
  • @EnableAutoConfiguration:启用Spring Boot的自动配置。我们随后会介绍自动配置的更多功能。就现在来说,我们只需要知道这个注解会告诉Spring Boot自动配置它认为我们会用到的组件。
  • @ComponentScan:启用组件扫描。这样我们能够通过像@Component、@Controller、@Service这样的注解声明其他类,Spring会自动发现它们并将它们注册为Spring应用上下文中的组件。

4。创建一个测试类

Spring实战第五版(中文版)学习笔记-第一章 Spring起步

@SpringBootTest会告诉JUnit在启动测试的时候要添加上Spring Boot的功能。

相关标签: 框架学习 spring