Spring_Day01

文章目录

一. 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官网:https://spring.io/

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 名称空间
<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:p="http://www.springframework.org/schema/p"

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">
2. 第二步:使用 p 名称空间.
  • 普通属性:p:属性名称=“aaa”
  • 对象类型属性:p:属性名称-ref=“bbb”
<!-- p 名称空间的属性注入的方式 -->
<bean id="car2" class="spring.demo4.Car2" p:name="宝马7" p:price="1200000"/>

<bean id="person" class="spring.demo4.Person" p:name="志强" p:car2-ref="car2"/>

(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<String> list;
	private Map<String,String> map;
	private Properties properties;
	
	public void setArrs(String[] arrs) {
		this.arrs = arrs;
	}
	
	public void setList(List<String> list) {
		this.list = list;
	}

	public void setMap(Map<String, String> 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);
	}	
}

在这里插入图片描述

<?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="person" class="property.Person">
		<!-- 数组类型的属性 -->
		<property name="arrs">
			<list>
				<value>老林</value>
				<value>老王</value>
				<value>阿飞</value>
			</list>
		</property>
		
		<!-- 注入 List 集合的数据 -->
		<property name="list">
			<list>
				<value>小奥</value>
				<value>小王</value>
				<value>小丁</value>
			</list>
		</property>
		
		<!-- 注入 Map 集合 -->
		<property name="map">
			<map>
				<entry key="aaa" value="111" />
				<entry key="bbb" value="222" />
				<entry key="ccc" value="333" />
			</map>
		</property>
		
		<!-- Properties 的注入 -->
		<property name="properties">
			<props>
				<prop key="username">root</prop>
				<prop key="password">123</prop>
			</props>
		</property>
	</bean>
</beans>        

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

六. spring整合web项目原理

1. 加载spring核心配置文件

在这里插入图片描述

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

2. 实现思想:

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

3. 实现原理

(1). ServletContext对象

(2). 监听器

(3). 具体使用:

  • 在服务器启动时候,为每个项目创建一个ServletContext对象
  • 在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建
  • 使用监听器监听到ServletContext对象创建时候,
    – 加载spring配置文件,把配置文件配置对象创建
    – 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
  • 获取对象时候,到ServletContext域得到 (getAttribute方法)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值