Java学习-SSM
-
spring
-
springMVC
-
Maven高级
-
spring boot
-
MyBatisPlus
介绍
本笔记用于Spring,springMVC,Maven高级,spring boot,MyBatisPlus的学习。内有源码和笔记 学习地址(bilibili):BV1Fi4y1S7ix
仓库地址(码云gitee.com):gitee仓库
Spring Framework系统框架
该框架是Spring4版本官网公布的,现在Spring已经是5版本,但是官网没有更新最新的系统结构图。
学习顺序是1-2-3-4
学什么
- 简化开发
- IOC
- AOP
- 事务处理
- 框架整合
- MyBatis
- MyBatis-plus
- Struts
- Struts2
- Hibernate
- …
初识spring
- 官网spring.io
- Spring Framework
- Spring Boot
- Spring Cloud
2.Spring 系统架构
Spring Frameword系统架构
-
Data Access:数据访问
-
Data Integration:数据集成
-
Web:Web开发
-
AOP:面向切面变成
-
Aspects:AOP思想
-
Core Container:核心容器
-
Test:单元测试与集成测试
Spring Frameword学习路线
3.核心概念
- IoC/DI
- IoC容器
- Bean
小结
- IoC/DI思想
- IoC容器
- Bean
IOC入门案例
- 导入Spring坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
- 定义Spring管理的类(接口)
public interface BookService{
public void save();
}
public class BookServiceImpl implements BookService {
private BookDao bookDao = new BookDaoImpl();
public void save(){
bookDao.save();
}
}
- 创建Spring配置文件,配置对应类作为Spring管理的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">
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"></bean>
</beans>
- 初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean
public class App {
public static void main(String[] args) {
//加载配置文件得到上下文对象,也就是容器对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取资源
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}
}
DI入门案例
DI入门案例思路分析
- 基于IoC管理bean
- Service中使用new形式创建的Dao对象是否保留?(否)
- Service中需要的Dao对象如何进入到Service中?(提供方法)
- Service与Dao之间的关系如何描述?(配置)
applicationContext.xml
1. 导入Spring的坐标 Spring-context
2. 配置bean
3.获取IOC容器
4.获取bean
5.删除业务层中使用new的方式创建的dao对象
6.提供对应的set方法
总结分析:
Bean的基础配置
bean基础配置
类别 | 描述 |
---|---|
名称 | bean |
类型 | 标签 |
所属 | beans标签 |
功能 | 定义Spring核心容器管理对象 |
格式 | <beans> <bean/> <bean></bean> </beans> |
属性列表 | id:bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一 class:bean的类型,即配置的bean的全路径类名 |
范例 | <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" /> <bean id="bookService" class="com.itheima.dao.impl.BookServiceImpl" ></bean> |
![7-2-Bean的配置](https://img-blog.csdnimg.cn/img_convert/dd054eeb3f24595ab43f20488a3f5949.png)
bean别名配置
类别 | 描述 |
---|---|
名称 | name |
类型 | 属性 |
所属 | bean标签 |
功能 | 定义bean的别名,可定义多个,使用逗号(,)分号(;)空格( )分隔 |
范例 | <bean id="bookDao" name="dao bookDaoImpl" class="com.itheima.dao.impl.BookDaoImpl" /> <bean name="service bookServiceImpl" class="com.itheima.dao.impl.BookServiceImpl" ></bean> |
![7-2-Bean的配置-2](https://gitee.com/zc-personal/java-learning-ssm/raw/master/Java学习-SSM.assets/7-2-Bean的配置-2.png)
bean作用范围配置
-
spring创建的bean默认是一个单例实例。类似于new的对象都是一个对象,内存地址都一样
-
用scope可以配置 是否单例
类别 | 描述 |
---|---|
名称 | scope |
类型 | 属性 |
所属 | bean标签 |
功能 | 定义bean的作用范围,可选范围如下 ● singleton:单例(默认) ● prototype:非单例 |
范例 | <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/> |
![7-2-Bean的配置-3](https://gitee.com/zc-personal/java-learning-ssm/raw/master/Java学习-SSM.assets/7-2-Bean的配置-3.png)
bean作用范围说明
- 为什么bean默认为单例
- 适合交给容器进行管理的bean
- 表现层对象
- 业务层对象
- 数据层对象
- 工具对象
- 不适合交给容器进行管理的bean
- 封装实体的域对象
![集合注入](Java学习-SSM.assets/4-集合注入.jpg)
-
表现层对象:servlet
业务层对象:service
数据层对象:dao
工具对象:util -
封装实体的域对象:domain
Bean实例化(3种)
构造方法(常用)
静态工厂(了解)
需要在配置文件种指名工厂类和创建bean的方法
实例工厂与FactoryBean
FacotryBean
bean生命周期
- 生命周期:从创建到消亡的过程
- bean生命周期:bean从创建到销毁的整体过程
- bean生命周期控制:在bean创建后到销毁前做一些事情
![8-2-Bean实例化-13](https://gitee.com/zc-personal/java-learning-ssm/raw/master/Java学习-SSM.assets/8-2-Bean实例化-13.png)
bean生命周期控制
- 提供生命周期控制方法
public class BookDaoImpl implements BookDao{
public void save() {
System.out.println("book dao save ...")
}
public void init() {
System.out.println("book init ...")
}
public void destory() {
System.out.println("book destory ...")
}
}
- 配置生命周期控制方法
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory" />
![8-2-Bean实例化-14](https://gitee.com/zc-personal/java-learning-ssm/raw/master/Java学习-SSM.assets/8-2-Bean实例化-14.png)
bean生命周期控制——接口控制(了解)
- 实现InitializingBean,DisposableBean接口
public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {
public void save() {
System.out.prinitln("book service save ...");
}
public void afterPropertiesSet() throws Exception {
System.out.prinitln("afterPropertiesSet");
}
public void destroy() throws Exception {
System.out.prinitln("destroy");
}
}
![8-2-Bean实例化-15](https://gitee.com/zc-personal/java-learning-ssm/raw/master/Java学习-SSM.assets/8-2-Bean实例化-15.png)
bean的生命周期
- 初始化容器
- 创建对象(内存分配)
- 执行结构方法
- 执行属性注入(set操作)
- 执行bean初始化方法
- 使用bean
- 执行业务操作
- 关闭/销毁容器
- 执行bean销毁方法
![8-2-Bean实例化-16](https://gitee.com/zc-personal/java-learning-ssm/raw/master/Java学习-SSM.assets/8-2-Bean实例化-16.png)
bean销毁时机
-
容器关闭前出发bean的销毁
-
关闭容器方式:
-
手工关闭容器
ConfigurableApplicationContext接口close()操作
-
注册关闭钩子,在虚拟机推出前先关闭容器在推出虚拟机
ConfigurableApplicationContext接口registerShutdownHook()操作
-
public class AppForLifeCycle {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ctx.close();
}
}
![8-2-Bean实例化-17](https://gitee.com/zc-personal/java-learning-ssm/raw/master/Java学习-SSM.assets/8-2-Bean实例化-17.png)
小结![8-2-Bean实例化-18](https://img-blog.csdnimg.cn/img_convert/ef569325e0551c09ca3f60c77a2e790d.png)
依赖注入DI
依赖注入方式
setter注入
引用类型
简单类型
构造器注入
总结
-
依赖注入方式
-
setter注入
- 简单类型
- 引用类型
-
构造器注入
- 简单类型
- 引用类型
-
-
依赖注入方式选择
- 建议使用setter注入
- 第三方技术根据情况选择
5.依赖自动装配
- IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程成为自动装配
- 自动装配方式
- 按类型(常用)
- 按名称
- 按构造方法
- 不自动装配
- 配置中使用bean标签autowire属性设置自动装配的类型
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
依赖自动装配特征
小结
- 自动装配概念
- 自动装配类型
集合注入
- 数组
- List
- Set
- Map
- Properties
注入集合对象
<property name="array">
<array>
<value>100</value>
<value>200</value>
<value>300</value>
</array>
</property>
<property name="list">
<list>
<value>itcast</value>
<value>itheima</value>
<value>boxuegu</value>
<value>chuanzhihui</value>
</list>
</property>
<property name="set">
<set>
<value>itcast</value>
<value>itheima</value>
<value>boxuegu</value>
</set>
</property>
<property name="map">
<map>
<entry key="county" value="china"/>
<entry key="province" value="beijing"/>
<entry key="city" value="beijingshi"/>
</map>
</property>
<property name="properties">
<props>
<prop key="county">china</prop>
<prop key="province">beijing</prop>
<prop key="city">beijingshi</prop>
</props>
</property>
小结
- 注入集合
案例:数据源对象管理
-
第三方资源配置管理
-
导入druid坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
- 配置数据源对象作为spring管理的bean
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
小结
- Spring管理第三方资源
- DruidDataSource
- ComboPooledDataSource
加载properties文件
添加命名空间
更新时间:2022-05-16
更新状态:待更新(未结)