JavaWeb项目实战三(Spring快速入门IOC)

Posted OceanSec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb项目实战三(Spring快速入门IOC)相关的知识,希望对你有一定的参考价值。

Spring

介绍

官网:https://spring.io

目前版本:Spring web 5.3.19 maven仓库地址

Spring 是一个支持快速开发 Java EE 应用程序的框架,简化了 Java web 开发操作

Spring Framework主要包括几个模块:

  • 支持 IoC 和 AOP 的容器;
  • 支持 JDBC 和 ORM 的数据访问模块;
  • 支持声明式事务的模块;
  • 支持基于 Servlet 的 MVC 开发;
  • 支持基于 Reactive 的 Web 开发;
  • 以及集成 JMS、JavaMail、JMX、缓存等其他模块

优点

  1. 免费开源、轻量、非入侵
  2. 控制反转(IOC),面向切面编程(AOP)
  3. 支持事务处理,对框架整合的支持、

组成

扩展

Spring Boot

  • 快速开发脚手架
  • 基于 SpringBoot 可以快速开发单个微服务
  • 和 Maven 一致:约定大于配置

Spring Cloud

  • SpringCloud 基于 SpringBoot 实现

SpringBoot 现在公司用的比较多,学习 SpringBoot 的前提是学习 SpringMVC

IOC

Spring:IOC本质分析探究IoC原理

在 IoC 模式下,控制权发生了反转,即从应用程序转移到了IoC容器,所有组件不再由应用程序自己创建和配置,而是由 IoC 容器负责,这样,应用程序只需要直接使用已经创建好并且配置好的组件

控制反转 IoC(Inversion of Control),是一种设计思想,DI (依赖注入)是实现 IoC 的一种方法,也有人认为 DI 只是 IoC 的另一种说法。没有 IoC 的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了

Spring 的核心就是提供了一个 IoC 容器,它可以管理所有轻量级的 JavaBean 组件,提供的底层服务包括组件的生命周期管理、配置和组装服务、AOP 支持,以及建立在 AOP 基础上的声明式事务服务等

Demo

接下来我们使用 XML 方式配置 Bean,采用 XML 方式配置 Bean 的时候,Bean 的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean 的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的

控制反转是一种通过描述(XML 或注解)并通过第三方去生产或获取特定对象的方式。在 Spring 中实现控制反转的是 IoC 容器,其实现方法是依赖注入(Dependency Injection,DI)

  1. 创建 Maven 项目

  2. 导入 Spring 相关 jar 包

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.19</version>
    </dependency>
    
  3. 编写一个 Hello 实体类

  4. 编写 spring 文件 , 这里命名为 beans.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">
    
        <!--bean就是java对象 , 由Spring创建和管理-->
        <bean id="hello" class="com.ocean.pojo.Hello">
            <property name="str" value="Spring"/>
        </bean>
    </beans>
    

    注:ref 引用 Spring 容器中创建好的对象,value 引用具体的值

  5. 编写实现类

    public class MyTest 
        public static void main(String[] args) 
            // 获取Spring的上下文对象
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
            // 因为对象都在Spring中管理了,所以要使用的话直接取出来即可
            Hello hello = (Hello) applicationContext.getBean("hello");
            System.out.println(hello.toString());
        
    
    

    再去看 pojo 对象可以发现有特殊的标记

Spring 容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从 Ioc 容器中取出需要的对象

这个过程就叫控制反转 :

控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用 Spring 后 , 对象是由 Spring 来创建的

反转 : 程序本身不创建对象 , 而变成被动的接收对象

依赖注入 : 就是利用 set 方法来进行注入的,可以看到 set 方法前边有特殊标记

IOC 是一种编程思想 , 由主动的编程变成被动的接收

到了现在 , 我们彻底不用再程序中去改动了 , 要实现不同的操作 , 只需要在xml配置文件中进行修改 , 所谓的 IoC,一句话搞定 : 对象由 Spring 来创建 , 管理 , 装配 !

创建 IOC 对象

  1. 默认使用无参构造方法创建对象

  2. 有参构造创建对象的方法

    1. 下标赋值

          <bean id="user" class="com.ocean.pojo.Hello">
              <constructor-arg index="0" value="Ocean"/>
          </bean>
      
    2. 通过类型

      <bean id="user" class="com.ocean.pojo.Hello">
          <constructor-arg type="java.lang.String" value="ocean" />
      </bean>
      
    3. 通过参数名

      <bean id="user" class="com.ocean.pojo.Hello">
          <constructor-arg name="str" value="ocean" />
      </bean>
      

在配置文件加载的时候,容器中管理的对象已经初始化了

配置

别名

<alias name="user" alias="test"/>

添加了别名,也可以使用别名获取到这个对象

Bean 的配置

<bean id="user" class="com.ocean.pojo.Hello" name="hello,hell2;hello3">
    <property name="str" value="ocean"/>
</bean>

也可以 name 中配置别名

import

一般用于团队开发,可以将多个配置导入使用

    <import resource="beans.xml"/>  

依赖注入

  1. 构造器注入,之前已经介绍过了

  2. set 方式注入(重点)

    依赖:bean 对象的创建依赖于容器

    注入:bean 对象中的所有属性,有容器来注入

    新建数据对象

    补充 setter 和 getter 方法

    <!--第一种,普通值注入,value-->
    <property name="name" value="ocean"/>
    <!--第二种,Bean注入,ref-->
    <property name="address" ref="address"/>
    

参考

以上是关于JavaWeb项目实战三(Spring快速入门IOC)的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb项目实战二(Mybatis快速入门)

JavaWeb项目实战二(Mybatis快速入门)

springboot入门神器 -http://start.spring.io/(在线项目构建)

Spring Boot 快速入门实战

Spring Boot 入门实战:长链接转短链接

学习Java分为几个阶段,分别是啥