Spring入门学习
优点
- Spring是一个开源的免费框架
- Spring是一个轻量级的、非入侵式的框架
- 控制反转(IOC),面向对象编程(AOP)
- 支持事物处理,对框架整合的支持
总结:Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架
Spring boot
- 一个快速开发的脚手架
- 基于Springboot可以快速开发的单个微服务
- 约定大于配置
SpringCloud
是基于SpringBoot实现的
学习上面2个的基础是:学习Spring 和 SpringMVC
IOC理论推导
通过注入的方法,降低耦合性,当业务改变时,更改代码的成本更低
控制反转是一种描述(XML或注解)并通过第三方去生产或获取对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入(Dependency Injection,DI)
使用IOC创建Spring
- 使用无参构造函数
- 下标构造
- 类型构造
- 参数名构造 (建议)
总结:在配置文件加载的时候,容器中的对象就已经被实例化了
Spring配置
- alias:别名
- id:bean的唯一标识符,相当与对象名
- class:bean对象相当的路径:包名+类型
- name:别名,可以取多个
- import:一般用于团队使用,可以将多个配置文件合并为一个
依赖注入
构造器注入
set方式注入
依赖注入:set注入
依赖:bean对象的创建依赖于容器
注入:bean对象中所以属性,由容器来注入
注意点:p命名和c命名空间不能直接使用,需要导入xml约束
bean的作用域
- 单例模式(默认)
- 原型模式:每次get时会创建一个新对象
- 其余request、session、application、这些只能在web开发中使用到
bean的自动装配
- 自动装配是spring满足bean依赖的一种方式
- spring会在上下文中自动寻找,并给bean装配属性
在spring中有三种装配的方式
- 在xml中显示的配置
- 在java中显示配置
- 隐式的自动装配bean【重要】
autowrite=""
byName :会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
byType:同上,匹配和自己对象属性相同的bean
小结:
byname的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法指一致。
bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型指一致
注解实现自动装配
要使用注解须知:
- 导入约束 context
- 配置注解的支持 context:annotation-config/
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
@Autowired :可以直接在属性上使用即可,也可以在set方式上使用!
使用Autowired 我们可以不用编写set方法,前提是在ioc中存在,并且符合名字byname
科普:@Nullable 字段标记了这个注解说明改字段可以为空(null)
使用@Autowire的字段装配环境比较复杂,无法使用单个@Autowired完成时可以使用@Qualifier(value=“xxx”)来配合使用
@Resource:默认使用byname的方式实现,如果找不到名字,则通过byType实现,都找不到则报错
使用注解开发
在spring4之后,使用注解开发要导入aop的包
使用注解要加context约束
- bean
- 属性注入
@Component 等价 @value 内容注入 - 衍生的注解
@Component 有几个衍生注解,在web开发中,按照mvc三层架构分层
dao【@Repository】
service【@Service】
controller【@Controller】 - 自动装配
- 作用域
@Scope - 小结
xml更万能,适用任何场景,方便维护
注解,不是自己类使用不了,维护叫复杂
最佳实践:
xml管理bean
注解复杂属性注入
***使用注解时,要开启注解支持和扫描包
使用java的方式配置Spring
javaconfig是Spring的应该子项目,在spring4之后,成为一个核心功能!代替配置文件
代理模式
*** 注:是SpringAOP的底层
- 静态代理
- 动态代理
整合Mybatis
原因:方便连接数据库
步骤:
- 导入相关jar包
junit
mybatis
mysql
spring
aop
mybais-spring - 编写配置文件
- 测试
mybatis
- 编写实体类
- 编写核心配置文件
- 编写接口
- 编写Mapper.xml
- 测试
Mybatis-spring
- 编写数据源配置
- sqlSessionFactory
- sqlSessionTemplate
- 需要给接口加实现类
- 将自己写的实现类,注入到Spring中
- 测试
声明事物
事物ACID原则
- 原子性
- 一致性
- 隔离性
- 持久性
spring中的事物管理
声明事物:AOP
编程式事物:需要在代码中,进行事物的管理