文章目录
前言
Spring是一个开源的轻量级的容器框架。Spring Framework(Spring框架)是一个开源的应用程序框架,由SpringSource公司开发,最初是为了解决企业级开发中各种常见问题而创建的。它提供了很多功能,例如:依赖注入(Dependency Injection)、面向切面编程(AOP)、声明式事务管理(TX)等。其主要目标是使企业级应用程序的开发变得更加简单和快速,并且Spring框架被广泛应用于Java企业开发领域。
一、Spring 体系架构
二、Spring核心功能
IOC/DI : 控制反转/依赖注入
AOP :面向切面编程
TX:声明式事务
三、IOC
IOC: Inversion of Control 控制反转
- 概念:原先由程序员通过new关键字创建对象事情,转交给Spring负责。
1. 控制反转中控制:控制类的对象
2. 控制反转中反转:转交给Spring - 作用:解耦合
1. 解除了程序员和对象管理之间的耦合。
IoC 主要是针对对象的创建和调用控制而言的,也就是说,当应用程序需要使用一个对象时,不再是应用程序直接创建该对象,而是由 IoC 容器来创建和管理,即控制权由应用程序转移到 IoC 容器中,也就是“反转”了控制权。这种方式基本上是通过依赖查找的方式来实现的,即 IoC 容器维护着构成应用程序的对象,并负责创建这些对象。
四、SpringIoC容器介绍
Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这些组件之间丰富的相互依赖关系。
SpringIoc容器接口:
BeanFactory
接口提供了一种高级配置机制,能够管理任何类型的对象,它是SpringIoC容器标准化超接口!
ApplicationContext
是 BeanFactory
的子接口。它扩展了以下功能:
- 更容易与 Spring 的 AOP 功能集成
- 消息资源处理(用于国际化)
- 特定于应用程序给予此接口实现,例如Web 应用程序的
WebApplicationContext
ApplicationContext容器实现类:
五、Spring框架提供了多种配置方式:XML配置方式、注解方式和Java配置类方式
-
XML配置方式:是Spring框架最早的配置方式之一,通过在XML文件中定义Bean及其依赖关系、Bean的作用域等信息,让Spring IoC容器来管理Bean之间的依赖关系。该方式从Spring框架的第一版开始提供支持。
-
注解方式:从Spring 2.5版本开始提供支持,可以通过在Bean类上使用注解来代替XML配置文件中的配置信息。通过在Bean类上加上相应的注解(如@Component, @Service, @Autowired等),将Bean注册到Spring IoC容器中,这样Spring IoC容器就可以管理这些Bean之间的依赖关系。
-
Java配置类方式:从Spring 3.0版本开始提供支持,通过Java类来定义Bean、Bean之间的依赖关系和配置信息,从而代替XML配置文件的方式。Java配置类是一种使用Java编写配置信息的方式,通过@Configuration、@Bean等注解来实现Bean和依赖关系的配置。
六、Spring 项目环境搭建 (java项目/web项目)
6.1采用maven创建java项目,导入spring的坐标
<!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.6</version>
</dependency>
<!--junit5测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<!-- 日志 , 会自动传递slf4j门面-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
== 注意:引入日志配置文件logback.xml 到 resources目录下==
6.2 创建spring配置文件
resources–>new–>XML Configuration File–>
spring config–>applicationContext.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">
</beans>
6.3创建实体类
@Data
public class Student {
private String sno;
private String name;
private int age;
}
6.4配置文件配置对象标签
<!--
bean:一个组件对象,由spring创建对象,并交给spring容器管理
id: 从容器获取对象唯一标识
class: 创建对象的类的全限定名
-->
<bean id="stu" class="com.bdqn.pojo.Student"></bean>
6.5单元测试
@Test
public void test01() {
//加载spring配置文件,返回spring容器
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//从spring容器中获取对象
Student stu=ac.getBean("stu",Student.class);
System.out.println(stu);
}
}
七、Spring创建bean实例化三种方式
7.1构造方法实例化
必须提供无参构造方法
<bean id="stu" class="pojo.Student"></bean>
7.2实例工厂实例化bean
1.编写工厂类和创建实例对象的方法
public class StudentFactory {
public Student createStudent() {
return new Student();
}
}
2.配置文件
<!--实例工厂创建bean-->
<bean id="studentFactory" class="util.StudentFactory"></bean>
<bean id="stu3" factory-bean="studentFactory" factory-method="createStudent"></bean>
7.3静态工厂实例化bean
1.编写静态工厂类和创建实例对象的静态方法
public class StudentStaticFactory {
public static Student createStudent() {
return new Student();
}
}
2.配置文件
<!--静态工厂创建bean-->
<bean id="stu4" class="util.StudentStaticFactory" factory-method="createStudent"></bean>
总结
- 默认配置文件加载时,调用无参构造创建对象,并交给SpringIOC容器管理。
- 设置延迟初始化对象创建
属性:<bean lazy-init="true" >
一个bean对象有效
<beans default-lazy-init="true">
所有bean有效 - 默认情况下,单例默认,不管获取多少次都是同一个对象。
属性:<bean scope="singleton">
单例模式
<bean scope="prototype">
多例模式