目录
1、主要内容
IOC是控制反转,依赖注入。
Spring
1、Spring框架
Spring是众多开源Java项目中的一员,基于分层的JavaEE应用的一站式轻量级开源框架,主要核心是IOC(控制反转/依赖注入)与AOP(面向切面)两大技术,实现项目在开发过程中的轻松解耦,提高项目的开发效率。
在项目中引入Spring立即可以带来下面的好处降低组件之间的耦合度,实现软件各层之间的解耦。可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需要处理复杂的事务传播。容器提供单例模式支持,开发人员不在需要自己编写实现代码。容器提供了AOP技术,利用它很容易实现,如:权限拦截、运行期监控等功能。
Spring框架是一个开源的JavaEE的应用程序,其主要核心是ICO(控制反转/依赖注入)和AOP(面向且切面编程)两大技术。
Spring IOC(控制反转/依赖注入)
Spring AOP(面向且切面编程)
Spring JDBC + 事务
Spring Task 定时调度
Spring Mail 邮件发送
2、Spring的作用
Dao层
JDBC操作
对应的框架:Mybatis
service层
Spring框架不是针对service层的业务逻辑,service没有适合框架。
Controller层
servlet(接收请求、响应数据、地址配置、页面转发)
对应框架:Spring MVC
Spring基于分布式的应用程序
基于轻量级的框架
配置管理
Bean对象的实例化—IOC
集成第三方的框架
Mybatis、Hibernate框架(持久层框架)
Spring MVC
Spring Security权限
Quartz时钟框架(定时任务处理)
Elasticsearch搜索引擎
自带服务
Mail邮件发送
Task定时任务处理-定时调度(定时短信、定时任务)
消息处理(异步处理)
3、Spring模块划分
Spring IOC模块:Bean对象的实例化,Bean的创建;
Spring AOP模块:动态代理,面向切面编程;
Spring JDBC + 事务模块;
Spring Web模块
4、Spring源码架构
核心容器:Spring-beans和Spring-core模块是Spring框架的核心模块,包含控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injcetion,DI),核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,工厂模式的实现。BeanFactroy使用控制反转(IOC)思想将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring上下文Spring Context:Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如:JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring-Expression模块是统一表达语言(unified EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统EL,但提供了额外的功能,最出色的要数函数调用和简答字符串的模板函数。
Spring框架环境搭建
环境要求
JDK版本:
JDK1.7及以上版本
Spring版本:
Spring5.x版本
新建Maven项目
调整项目环境
添加Spring框架的依赖坐标:
<!-- 添加Spring框架的核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
</dependencies>
pro.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Spring01</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Spring01</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 添加Spring框架的核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
</dependencies>
<build>
</build>
</project>
添加配置Spring配置文件
在项目的src下创建文件夹resource(Alt + Insert)
将resource标记为资源目录
在src\main\resourece目录下新建spring.xml文件,并拷贝官网文档提供的模板内容到xml中。
配置bean到xml中,把对应bean纳入到Spring容器来管理。
Spring.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
xmlns:即xml namespace xml使用的命名空间
xmlns:xsi即xml schema instance xml 遵守的具体规范
xsi:schemaLocation 本文档xml遵守的规范 官方指定
-->
<!-- 定义Bean对象
id bean对象的唯一标识符
class bean对象(需要被是实例化的bean对象)的全路径 包名+类名
-->
<bean id="userService" class="org.example.service.UserService"></bean>
</beans>
UserService.java:
package org.example.service;
public class UserService {
public void test(){
System.out.println("UserService...");
}
}
Starter.java:
import org.example.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Starter {
public static void main(String[] args) {
//加载spring对象的上下文环境
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
//得到需要被实例化的对象 getBean("id"):代表spring.xml配置文件中bean标签的id属性值,其也会返回一个实例化对象(object类型)
UserService userService = (UserService) ac.getBean("userService");
//调用方法
userService.test();
}
}
结果就是“UserService...”。