javaweb项目实战三(spring快速入门ioc)

OceanSec      2022-05-02     492

关键词:

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项目实战二(mybatis快速入门)

Mybatis官方手册:https://mybatis.org/mybatis-3/zh/index.htmlMyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或... 查看详情

我的serverless实战——三分钟快速入门serverless应用搭建

...前言一、Serverless是什么?二、Serverless架构和传统的项目架构区别三、Serverless应用搭建四、展望未来前言2020年天猫双11又一次创造记录,总交易额4982亿元,订单创建峰值58.3万笔/秒。对于阿里云来说有另一个意义࿰... 查看详情

spring实战-手动创建javaweb项目单体架构

环境:MacOS+IntelliJIDEA2019.3.1(UltimateEdition)1、创建存放web项目的文件夹mkdir-p~/Documents/test/demo2、在存放web项目的文件夹并创建pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="ht 查看详情

全网最细的教程javaweb项目入门到实战教程(下)

...tomcat下载与运行(未完)。今天我们就来说一下idea运行javaweb和上次没完成的tomcat下载与运行,下面一起开始吧!2.关闭tomcat服务器在bin目录下有一个shutdown.bat的文件,双击就可以关闭tomcat服务器;也可以使用cmd命令查看占用8080... 查看详情

opencv-pyqt项目实战qtdesigner和pyuic快速入门(代码片段)

欢迎关注『OpenCV-PyQT项目实战@Youcans』系列,持续更新中OpenCV-PyQT项目实战(1)安装与环境配置OpenCV-PyQT项目实战(2)QtDesigner和PyUIC快速入门OpenCV-PyQT项目实战(3)信号与槽机制文章目录1.QtDesigner和Py... 查看详情

spring4快速入门

本篇文章的demo基于spring官网入门案例。当然,我做了一些改变。spring官网案例:http://projects.spring.io/spring-framework/我的mavenweb项目结构如下:在pom.xml中添加spring的依赖:<dependency><groupId>org.springframework</groupId><a 查看详情

cp2044-深入javaweb项目实战精讲(2套实战项目)

...扣:1225462853进行交流得到帮助,获取学习资料.CP2044-深入JavaWeb项目实战精讲(2套实战项目)下载地址:http://pan.baidu.c 查看详情

vue快速入门(从入门到实战)(idea版)一篇文章即可快速入门(可直接开发前后端分离项目)(代码片段)

Vue快速入门一、Vue快速入门1、认识Vue2、安装Node.js(1)进入Node.js官网[https://nodejs.org/zh-cn/](https://nodejs.org/zh-cn/)2、NPM二、工程案例1、创建工程2、安装Vue(1)初始化项目(2)安装Vue3、创建HTML文件࿰ 查看详情

opencv-pyqt项目实战qtdesigner和pyuic快速入门(代码片段)

欢迎关注『OpenCV-PyQT项目实战@Youcans』系列,持续更新中OpenCV-PyQT项目实战(1)安装与环境配置OpenCV-PyQT项目实战(2)QtDesigner和PyUIC快速入门OpenCV-PyQT项目实战(3)信号与槽机制OpenCV-PyQT项目实战࿰... 查看详情

我的serverless实战——三分钟快速入门serverless应用搭建

...前言一、Serverless是什么?二、Serverless架构和传统的项目架构区别三、Serverless应用搭建四、展望未来前言2020年天猫双11又一次创造记录,总交易额4982亿元,订单创建峰值58.3万笔/秒。对于阿里云来说有另一个意义࿰... 查看详情

vue2.0项目实战vuex快速入门

Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex也集成到Vue的官方调试工具 devtoolsextension,提供了诸如零配置的ti... 查看详情

javaweb随笔:简单的javascript快速入门

简单的JavaScript快速入门1.变量学习语言往往会从变量入手,需要注意三个方面:变量的定义,变量的类型,变量的类型转换,掌握这三方面则一个语言的变量使用就能快速上手。1.1变量的定义JavaScript的变量定... 查看详情

项目实战15.2—企业级堡垒机jumpserver快速入门(代码片段)

本文收录在Linux运维企业架构实战系列必备条件硬件条件①一台安装好Jumpserver系统的可用主机(堡垒机)②一台或多台可用的Linux、Windows资产设备(被管理的资产)服务条件(1)coco服务①鉴于心态检测存在延迟,也可以直接在J... 查看详情

flutter--实战快速入门flutter

...五、博客专栏六、第三方库1.网络2.UI3.数据4.设备5.工具6.实战一、Flutter介绍Flutterapp使用了Dart语言,源自于Google,现在是ECMA的标准。Dart吸收了许多现代语言的特性,比如Kotlin和Swift,同时能被转译成 查看详情

[javaweb-bootstrap]bootstrap快速入门(代码片段)

快速入门 1.下载Bootstrap 2.在项目中将这三个文件夹复制 3.创建html页面,引入必要的资源文件 <!DOCTYPEhtml> <htmllang="zh-CN"> <head> <metacharset="utf-8"> <metahttp-equiv 查看详情

javaweb开发入门三(hibernate)基于intelligidea

Hibernate1.开发流程项目配置好后的结构:  1.下载源码: 版本:hibernate-distribution-3.6.0.Final2.引入hibernate需要的开发包(3.6版本),如果没有引用成功,在jar包上右键执行:addaslibrary 3.编写实体对象及对象的映射xml文... 查看详情

❤️数据结构入门❤️(4-5)-快速排序

...快速排序的修改4、快速排序的查找四、快速排序的刷题实战一、快速排序的定义二、快速排序的图解三、快速排序的实现1、快速排序的插入2、快速排序的删除3、快速排序的修改4、快速排序的查找四、快速排序的刷题实战ᾞ... 查看详情

[javaweb-servlet]概述与快速入门(代码片段)

Servlet:serverapplet*概念:运行在服务器端的小程序 *Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。 *将来我们自定义一个类,实现Servlet接口,复写方法。*快速入门: 1.创建JavaEE项目 2.... 查看详情