Spring简介
说明
一个Java应用层程序,是由许多个类组成的,这些类之间必然存在依赖关系,当项目越来越大,依赖关系越来越复杂,需要一个专业的框架来处理类之间的依赖关系,为了解决这个问题,SUN公司推出了EJB(重量级)专门用来解决类的依赖问题。
Spring(Spring Framework) 是一个开源框架,最早由Rod Johnson创建,并在《Expert One-on-One:J2EE Design and Development》这本著作中进行了介绍。Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能完成的事情。但Spring不仅仅局限于服务器端开发,任何Java应用都能在简单性、可测试性和松耦合等方面从Spring中获益。
bean的各种名称……虽然Spring用bean或者JavaBean来表示应用组件,但并不意味着Spring组
件必须要遵循JavaBean规范。一个Spring组件可以是任何形式的POJO(POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称)。
Spring 可以做非常多的事情。但归根结底,支撑Spring的仅仅是少许的基本理念,所有的理念都可以追溯到Spring最根本的使命上:简化Java开发。这是一个郑重的承诺。许多框架都声称在某些方面做了简化,但Spring的目标是致力于全方位的简化Java开发。这势必引出更多的解释,Spring是如何简化Java开发的?
为了降低Java开发的复杂性,Spring采取了以下4种关键策略:
- 基于POJO的轻量级和最小侵入式编程;
- 通过控制反转和依赖注入以及面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
几乎Spring所做的任何事情都可以追溯到上述的一条或多条策略。
- Spring的各种注入方式
- IOC/DI
- AOP(事务)
- JdbcTemplate
- 事务
Spring4和5的区别说明
spring4新特性 | spring5新特性 |
---|---|
删除了废弃的包和方法 | JDK基线更新至JDK8 |
支持部分JDK8 新特性 | 修订核心框架部分功能 |
支持JDK7 | 支持Kotlin语言 |
响应式编程模型 | |
支持Junit5 |
环境准备
jar包
版本说明
常见版本号说明
软件版本号:2.0.2.RELEASE
2:主版本号。当功能模块有较大更新或者整体架构发生变化时,主版本号会更新
0:次版本号。次版本表示只是局部的一些变动。
2:修改版本号。一般是 bug 的修复或者是小的变动
**RELEASE**:希腊字母版本号。次版本号用户标注当前版本的软件处于哪个开发阶段
版本号 | 说明 |
---|---|
Base | 设计阶段。只有相应的设计没有具体的功能实现。 |
Alpha | 软件的初级版本。存在较多的 bug |
Bate | 表示相对 alpha 有了很大的进步,消除了严重的 bug,还存在一些潜在的 bug。 |
Release | 该版本表示最终版。 |
jar包说明
常用jar包说明
Bean的配置 IOC
- IoC控制反转(IoC,Inversion of Control)
是一个概念,是一种思想。控制反转就是一个概念,是一种思想。控制反转就
是对对象控制权的转移,从程序代码本身反转到了外部容器。把对象的创建、初始化、
销毁等工作交给spring容器来做。由spring容器控制对象的生命周期。 - DI依赖注入:Dependency Injection
依赖注入DI是指程序运行过程中,若需要调用另
一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创
建后传递给程序。
依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式
组织在一起,而不是以硬编码的方式耦合在一起的。 - IoC与DI的关系
IoC是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式之一
是DI。
XML配置
创建一个Spring工程:
- 添加Spring相关依赖:
- 添加日志依赖:
Spring中默认采用了Apache Commons Logging作为日志框架,因此需要加入这个jar
下载链接
- 选中所有的jar,右键单击,选择add as Library
普通构造注入
- 创建Spring工程
- 创建Spring的XML配置文件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>
- 在Spring的配置文件中声明User Bean:
<?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"> <!-- 在容器中注册UserBean --> <bean class="com.dpb.javabean.UserBean" id="userBean"></bean> </beans>
所谓的声明,就是将自己的信息告诉Spring容器,例如id和class,Spring容器根据class,通过反射(默认使用的是无参构造方法)就可以创建一个名为user1的User对象。
- 初始化容器
public static void main(String[] args) {
//初始化Spring容器,当Spring容器初始化时,会自动加载配置文件,然后根据配置文件中的内容初始化Bean
ApplicationContext ac =
new ClassPathXmlApplicationContext("application.xml");
}
5. 初识化Spring容器之后,可以看到User已经被创建出来了。
注意:上面这种初始化方式,要求User必须有一个无参构造方法,如果没有无参构造方法,会抛出如下异常:
6.通过调用容器中的getBean方法可以获取Spring容器中的对象
public static void main(String[] args) {
//初始化Spring容器,当Spring容器初始化时,会自动加载配置文件,然后根据配置文件中的内容初始化Bean
ApplicationContext ac =
new ClassPathXmlApplicationContext("application.xml");
// 去Spring容器中获取一个UserBean对象
UserBean user = ac.getBean("userBean", UserBean.class);
System.out.println(user);
}