Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。第一个版本出现在2004年,由美国的sun公司开发,是Java领域最成功的框架。
其成功来自于设计理念,而不是技术。
最核心的理念是Ioc(控制反转)和AOP(面向切面编程)。
Ioc是Spring的基础,AOP是Spring的重要的功能,最典型的应用是数据库的事务处理。
Spring框架的核心功能有两个:
1、Spring容器作为超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean。
2、Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为"依赖注入"的方式来管理Bean之间的依赖关系。
低侵入式设计,代码的污染极低。
独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺。
Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦。
Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用。
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
bean就是实体类
Spring框架管理bean是通过两种方法
从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器。
实现了ApplicationContext接口,该类可以用于初始化Ioc容器
:从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件来创建Spring容器。
Spring Ioc容器根据开发者的配置进行资源定位。在Spring开发中,可以通过xml或 注解的方式进行资源配置,配置的内容由开发者提供
是将Resource定位到的信息,保存到Bean定义中(BeanDefinition),但是不会创建Bean实例
将BeanDefinition中定义的信息发布到Ioc容器中
当开发者调用getBean方法时Ioc容器会生成一个Bean实例
也叫依赖注入(Dependency Injection);其中心思想是以配置文件来管理Java实例的协作关系
使用Spring框架时,调用者无需主动获取被依赖对象,调用者只要被动接受Spring容器为调用者的成员变量赋值即可,使用Spring后,调用者获取被依赖对象的方式由原来的主动获取,变成了被动接受——称之为控制反转。
Spring容器负责将被依赖对象赋值给调用者的成员变量——相当于为调用者注入它依赖的实例,因此称之为依赖注入。
Ioc主要基于两个接口:
BeanFactory接口是Spring Ioc容器的最底层接口
BeanFactory中的方法
方法 | 描述 |
---|---|
getBean() | 用于获取配置给Spring Ioc容器的Bean。参数可以是字符串,也可以是Class类型 |
isSingleton() | 用于判断是否单例。若判断为真,则表示从容器中获取的bean是唯一的。默认是true |
isPrototype() | 与isSingleton()相反,若为真,容器会生成一个新的实例 |
ApplicationContext是BeanFactory的子接口。对BeanFactory接口进行了很多有用的扩展,ApplicationContext在绝大部分的工作场景下都使用ApplicationContext Spring IoC容器
将Speing版本号放入
<springVersion>5.1.1.RELEASEspringVersion>
在
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.12version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.0version>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>javax.servlet.jsp-apiartifactId>
<version>2.3.3version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13.2version>
<scope>compilescope>
dependency>
以下文件为原始模样;后序配置需再加
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
beans>
再webApp文件夹下的web.xml中添加如下信息
DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Applicationdisplay-name>
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath*:applicationContext.xmlparam-value>
context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
web-app>