博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring_Day01
阅读量:3957 次
发布时间:2019-05-24

本文共 5267 字,大约阅读时间需要 17 分钟。

文章目录

一. Spring概述

1. 什么是Spring

在这里插入图片描述

Spring是一站式框架
spring在javaEE三层结构结构中,每一层都提供不同的解决技术

  • web 层:Spring MVC.
  • 业务层(service):spring中的Bean 管理:(IOC)
  • 持久层(dao):Spring 的 JDBC 模板.ORM 模板用于整合其他的持久层框架

在这里插入图片描述

2. Spring 版本

  • hibernate 5.x
  • spring 4.x
  • struts 2

3. 为什么学习spring

方便解耦,简化开发

  • Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理

AOP 编程的支持

  • Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

声明式事务的支持

  • 只需要通过配置就可以完成对事务的管理,而无需手动编程

方便程序的测试

  • Spring 对 Junit5 支持,可以通过注解方便的测试 Spring 程序

方便集成各种优秀框架

  • Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz 等)的直接支持

降低 JavaEE API 的使用难度

  • Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,使这些 API 应用难度大大降低

4. spring核心两部分

spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

(1). AOP:面向切面编程

扩展功能不是修改源代码实现

在这里插入图片描述

(2). IOC:控制反转

  • 比如有一个类,在类里面有方法(不是静态的方法)调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象

把对象的创建不是通过new方式实现,而是交给spring配置创建类对象(交给spring进行管理)

在这里插入图片描述

在这里插入图片描述

5. 扩展

Spring Boot

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

Spring Cloud

  • SpringCloud是基于SpringBoot实现的

因为现在大公司都是用SpringBoot进行快速开发,学习SpringBoot的前提,需要完全掌握Spring及SpingMVC,承上启下的作用

弊端:发展太久之后,违背了原来的理念,配置十分繁琐,人称配置地狱

二. Spring的入门(IOC)

1. ioc的操作分为两部分

(1). ioc通过配置文件方式实现

(2). ioc基于注解的方式实现

2. ioc底层原理

  • 控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法
    在这里插入图片描述
  • IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
  • Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象

在这里插入图片描述

(1). ioc底层原理使用技术

利用set进行动态实现值的注入

  • 这种思想,从本质上解决了问题,我们程序员不用再去管理对象的创建,系统的耦合性大大降低,可以更加专注的在业务的实现上。
    在这里插入图片描述

1. xml配置文件

2. dom4j解决xml

3. 工厂设计模式

4. 反射

3. ioc入门案例

(1). 第一步 导入jar包

1. 解压资料zip文件

在这里插入图片描述

Jar包特点:都有三个jar包
在这里插入图片描述

2. 导入核心jar包

spring最基本功能时候,导入四个核心的jar包就可以了

在这里插入图片描述

3. 导入支持日志输出的jar包

在这里插入图片描述

(2). 第二步 创建类,在类里面创建方法

在这里插入图片描述

(3). 第三步 创建spring配置文件,配置创建类

1. spring核心配置文件名称和位置不是固定的

  • 建议放到src下面,官方建议applicationContext.xml

2. 引入schema约束

在这里插入图片描述

3. 配置对象创建

在这里插入图片描述

(4). 第四步 写代码测试对象创建

这段代码在测试中使用

在这里插入图片描述

(5). 解决配置文件没有提示

解决方法:

spring引入schema约束,把约束文件引入到eclipse中

(1)复制约束路径	www.springframework.org/schema/beans/spring-beans.xsd

在这里插入图片描述

4. IOC和DI区别

(1)IOC: 控制反转,把对象创建交给spring进行配置

(2)DI(Dependency Injection): 依赖注入,向类里面的属性中设置值
(3)关系:依赖注入不能单独存在,需要在ioc基础之上完成操作。需要有 IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依赖的属性设置进去.

三. spring中的工厂

1. ApplicationContext

ApplicatioContext 接口有两个实现类:

在这里插入图片描述

  • ClassPathXmlApplicationContext :加载类路径下 Spring 的配置文件.
  • FileSystemXmlApplicationContext :加载本地磁盘下 Spring 的配置文件.

2. BeanFactory

在这里插入图片描述

3. BeanFactory 和 ApplicationContext 的区别:

  • BeanFactory :是在 getBean 的时候才会生成类的实例.
  • ApplicationContext :在加载 applicationContext.xml 时候就会创建

四. spring的相关配置

1. Bean标签的常用属性

(1). id属性

起名称,id属性值名称任意命名

  • id属性值,不能包含特殊符号
  • 根据 id 值得到配置对象

(2). class属性

创建对象所在类的全路径

(3). name属性

功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号

  • 现在一般不使用了

(4). scope属性

  • singleton:默认值,单例

    在这里插入图片描述
    在这里插入图片描述

  • prototype:多例的

    在这里插入图片描述
    在这里插入图片描述

  • request :web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中

  • session :web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.

  • globalSession :web 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当于 session

2. Bean 的生命周期的配置

  • 通过配置标签上的 init-method 作为 Bean 的初始化的时候执行的方法,配置 destroy-method作为 Bean 的销毁的时候执行的方法。
  • 销毁方法想要执行,需要是单例创建的 Bean 而且在工厂关闭的时候,Bean 才会被

五. spring的bean管理(xml配置文件)

1. bean实例化三种方式

  • 定义:在spring里面通过配置文件创建对象

2. bean实例化三种方式实现

(1). 第一种 使用类的无参数构造创建(重点)

在这里插入图片描述

必须要有无参构造方法,没有会出现异常

(2). 第二种 使用静态工厂创建

在类里面创建静态的方法,返回类对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3). 第三种 使用实例工厂创建

创建不是静态的方法,返回类对象

在这里插入图片描述
在这里插入图片描述
进行测试
在这里插入图片描述

3. 属性注入方式介绍

  • 定义:创建对象时候,向类里面属性里面设置值
    在这里插入图片描述

(1). java代码中属性注入的方式介绍(三种方式)

1. 使用set方法注入

在这里插入图片描述

2. 使用有参数构造注入

在这里插入图片描述

3.使用接口注入

在这里插入图片描述

(2). 在spring框架里面的:Bean 的属性注入

1. set方法注入属性(重点)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 有参数构造方法注入属性

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(3). Spring 的属性注入:对象类型的注入(重点)

在spring中属性的注入不但但是普通的变量、字符串等,也可以是对象进行注入

1. 创建service类和dao类

在service得到dao对象

在这里插入图片描述

2. 在service里面把dao作为类型属性

在这里插入图片描述

3. 生成dao类型属性的set方法

在这里插入图片描述

4. 配置文件中注入关系

在这里插入图片描述

最后进行测试
在这里插入图片描述

(4). P名称空间注入(很少使用)

1. 第一步:引入 p 名称空间

2. 第二步:使用 p 名称空间.

  • 普通属性:p:属性名称=“aaa”
  • 对象类型属性:p:属性名称-ref=“bbb”

(5). spring注入复杂类型数据

注入:数组、集合等复杂数据类型

1 数组2 list集合3 map集合4 properties类型(键值对)

在这里插入图片描述

package property;import java.util.List;import java.util.Map;import java.util.Properties;public class Person {
private String pname; public void setPname(String pname) {
this.pname = pname; } private String[] arrs; private List
list; private Map
map; private Properties properties; public void setArrs(String[] arrs) {
this.arrs = arrs; } public void setList(List
list) {
this.list = list; } public void setMap(Map
map) {
this.map = map; } public void setProperties(Properties properties) {
this.properties = properties; } public void test1() {
System.out.println("arrs:"+arrs); System.out.println("list:"+list); System.out.println("map:"+map); System.out.println("properties:"+properties); } }

在这里插入图片描述

老林
老王
阿飞
小奥
小王
小丁
root
123

最后进行测试

在这里插入图片描述

六. spring整合web项目原理

1. 加载spring核心配置文件

在这里插入图片描述

new对象,功能可以实现,效率很低

2. 实现思想:

把加载配置文件和创建对象过程,在服务器启动时候完成

3. 实现原理

(1). ServletContext对象

(2). 监听器

(3). 具体使用:

  • 在服务器启动时候,为每个项目创建一个ServletContext对象
  • 在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建
  • 使用监听器监听到ServletContext对象创建时候,
    – 加载spring配置文件,把配置文件配置对象创建
    – 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
  • 获取对象时候,到ServletContext域得到 (getAttribute方法)

转载地址:http://phxzi.baihongyu.com/

你可能感兴趣的文章
HTTP请求之POST与GET区别
查看>>
SSM结合Redis
查看>>
优化数据库的八种方法
查看>>
Java Web服务收到请求时线程的情况以及session情况
查看>>
SSM配置文件信息加密实现
查看>>
@Produces注解
查看>>
谈谈序列化—实体bean一定要实现Serializable接口?
查看>>
实用小技巧之电脑如何滚动截屏/截取长图
查看>>
Eclipse离线安装Java Decompiler插件
查看>>
Http预请求options
查看>>
未来设计师的工作模式?从室内设计领域的实时设计说起 | Mixlab趋势
查看>>
智能设计 | MixAI 知识库 No.69
查看>>
通过研究微信文章的相关推荐逻辑 ,尝试生成指南| Mixlab设计黑客
查看>>
浏览器低成本实现免手提的用户体验,使用人脸、手势、姿态追踪 | Mix群聊
查看>>
这个世界上肯定有另一个我,做着我不敢做的事,过着我想过的生活 | MixAI 知识库 No.70...
查看>>
表情包数据挖掘 | Mix群聊
查看>>
如何阅读科研论文
查看>>
理解本真的REST架构风格
查看>>
10款免费且开源的项目管理工具
查看>>
java调用javascript :js引擎rhino
查看>>