关键词:
Spring
介绍
目前版本:Spring web 5.3.19 maven,仓库地址
Spring 是一个支持快速开发 Java EE 应用程序的框架,简化了 Java web 开发操作
Spring Framework主要包括几个模块:
- 支持 IoC 和 AOP 的容器;
- 支持 JDBC 和 ORM 的数据访问模块;
- 支持声明式事务的模块;
- 支持基于 Servlet 的 MVC 开发;
- 支持基于 Reactive 的 Web 开发;
- 以及集成 JMS、JavaMail、JMX、缓存等其他模块
优点
- 免费开源、轻量、非入侵
- 控制反转(IOC),面向切面编程(AOP)
- 支持事务处理,对框架整合的支持、
组成
扩展
Spring Boot
- 快速开发脚手架
- 基于 SpringBoot 可以快速开发单个微服务
- 和 Maven 一致:约定大于配置
Spring Cloud
- SpringCloud 基于 SpringBoot 实现
SpringBoot 现在公司用的比较多,学习 SpringBoot 的前提是学习 SpringMVC
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)
-
创建 Maven 项目
-
导入 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>
-
编写一个 Hello 实体类
-
编写 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 引用具体的值
-
编写实现类
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 对象
-
默认使用无参构造方法创建对象
-
有参构造创建对象的方法
-
下标赋值
<bean id="user" class="com.ocean.pojo.Hello"> <constructor-arg index="0" value="Ocean"/> </bean>
-
通过类型
<bean id="user" class="com.ocean.pojo.Hello"> <constructor-arg type="java.lang.String" value="ocean" /> </bean>
-
通过参数名
<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"/>
依赖注入
-
构造器注入,之前已经介绍过了
-
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.... 查看详情