导读:
本套笔记主要基于spring5,介绍spring基础内容,包括Ioc、Aop、springMVC、spring基础注解开发。笔记通俗易通,每一个知识点都会给出相应案例。后期还会更新spring高级内容。
第 1 章 spring基础入门
1.1 spring介绍
1.1.1 什么是spring
Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(控制反转)和 AOP(面向切面编程)为内核。提供了展现层 SpringMVC和持久层 Spring
JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架。
从上面我们可以看出spring的核心为IoC(控制反转)和 AOP(面向切面编程)。那么是什么是控制反转(IoC),什么是 AOP(面向切面编程)呢?
控制反转(IoC): 就是把对象的创建权交给spring容器,我们需要在new对象了。想要什么对象时直接去spring容器里面去找。
AOP(面向切面编程):通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术(动态结合的一种技术)。
1.1.2 spring的优点
1)方便解耦,简化开发
通过 Spring 提供的 IoC容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
2)AOP 编程的支持
通过 Spring的 AOP 功能,方便进行面向切面编程,许多不容易用传统 OOP(面向对象) 实现的功能可以通过 AOP 轻松实现。
3) 声明式事务的支持
可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务管理,提高开发效率和质量。
4) 方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。
5)降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
6)方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
1.2.3 spring体系结构图
-
数据访问/集成(Data Access/Integration)层
-
JDBC:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析。
-
ORM:为流行的对象关系映射(Object-Relational Mapping)API提供集成层,包括JPA和Hibernate。使用Spring-orm模块可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,例如声明式事务管理功能。
-
OXM:提供了一个支持对象XML映射的抽象层实现,例如JAXB、Castor、JiBX和XStream。
-
JMS:(Java Messaging Service):指Java消息传递服务,包含用于生产和使用消息的功能。自Spring4.1以后,提供了与Spring-messaging模块的集成。
-
Transactions:支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。
-
-
Web层
- websocket:Spring4.0以后新增的模块,它提供了WebSocket和SocketJS的实现。
- Servlet:包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。
- Web:提供了基本的Web开发集成功能,例如多文件上传功能、使用Servlet监听器初始化一个IOC容器以及Web应用上下文。
- Portlet:类似于Servlet模块的功能,提供了Portlet环境下的MVC实现。
-
AOP(Aspect Oriented Programming)模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。
-
Aspects:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。
-
植入(Instrumentation)模块:提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用。
-
消息传输(Messaging):Spring4.0以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。
-
核心容器(Core Container)
- Bean:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理的对象称为Bean。
- Core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
- Context:建立在Core和Beans模块的基础之上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。
-
测试(Test)模块:支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。
1.2 spring入门程序
开发一个spring应用,一般会分为以下几步
第1步:导入 Spring 开发jar包坐标
注意:如果没有用maven创建项目的话,需要手动导入jar包,如果用maven创建的项目,直接在pom.xml中导入坐标依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
第2步:编写 Dao 接口和实现类
//接口
public interface UserDao {
public void saveSpring();
}
//实现类
public class UserDaoImpl implements UserDao {
@Override
public void saveSpring() {
System.out.println("spring running....");
}
}
第3步:创建 Spring 核心配置文件
配置文件一般起名叫做:applicationContext-xxxx.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/beanshttp://www.springframework.org/schema/beans/spring- beans.xsd">
</beans>
第4步:在 Spring 配置文件中配置 UserDaoImpl
<?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="userDao" class="com.wx.dao.impl.UserDaoImpl"></bean>
</beans>
第5步:使用 Spring 的 API 获得 Bean 实例
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.saveSpring();
}
敬请期待spring基础下一章节