一、从Spring官方文档再次了解Spring
- 首先登录Spring官方文档(非常有用):Core Technologies
- 理解一些启动服务基本流程概念:举例redis-service服务依靠redis-config配置文件来启动Redis、Tomcat服务依靠conf文件setting.xml启动服务、web服务依靠web.xml配置文件启动服务。同理,在Maven中引入SpringIOC依赖也相当是引入一种service服务,这service服务需要用配置文件.xml文件进行配置(现在几乎改用注解,如@Controller),然后才能启动使用该服务。(------->SpringBoot:起步依赖、自动配置bean/默认值,将会不再用引入依赖和设置繁琐的配置文件!)
- ------------为什么要引入Spring框架-----------
- 优点是:简化开发、非入侵式的框架(解耦1,对原项目没任何影响)、控制反转IOC/面向切面AOP(Spring作为独立个体的特性)、支持事务的处理(Spring作为独特个体特性,声明式事务)、支持框架整合,方便测试(Spring作为粘合剂,将java与Mybatis、Junit整合...)
- 缺点是:Spring下的SpringBoot发展太久,配置繁琐!
----------------------------------先了解SpringIOC的xml和注解两种方式------------------------------------------
- --------------控制反转IOC-----------------对象由Spring装配、托管、管理----
- 概念:生成对象的控制权由程序员变成用户(现在用户转变成SpringIOC容器管理)。原来:程序员写好程序,留了API,用户只传入参数调用API生成对象(该对象由程序员已写好的,不可改变对象的类)。现在:程序员写好程序,留了API,API的参数就是对象的类型,用户想调用什么对象,就自己选择后传入参数即可(像set方法),所以对象的产生类型的控制权,是在用户手上,而不在程序员手上!所以叫控制反转!这样的好处是,程序员只需要关心业务,尽可能实现客户的业务功能代码,客户怎么使用,由他们自己决定!
- 如何使用IOC:该过程是Spring创造了对象,所以叫控制反转:(部分图片来源网络)(在.xml中注册bean(了解.xml方式,再了解注解方式@Component),托管类在IOC容器。若要属性注入,类上一定要写seter才能实现属性注入!可用lombok注解代替。)(tips:多个.xml配置文件,用import实现合并.xml。若注解方式是@Import)(Spring上下文对象:ApplicationContext;Servlet上下文对象:HttpServletContext。HttpServletContext后来将被ApplicationContext管理,还可以来解决http的bens的作用域)
- 了解.xml配置:(图片来源网络)
- 了解配置中.xml与注解的对应关系:加入容器<bean>等于@Controller...;依赖注入(属性注入)<property name value>(手动装配)<autwire=byName>(自动装配)等于@Autowired(自动装配);
- --------------依赖注入----------
- 概念:依赖注入也叫bean的属性由容器注入,简称属性注入。
- 注解方式@Autowired:要开启注解支持,在.xml中写:
- @Autowired:先根据类型,再根据名字,若没有或不唯一就报错。可以和required=false搭配可以不存在
- @Resource:先根据名字,再根据类型,若没有或不唯一就报错
---------------掌握了上述IOC的.xml的开发(基石),现在可以了解如何用IOC注解开发----------------
前言:xml与注解比较:xml适用任何场景,维护简单方便;注解维护相对复杂。应该根据项目来综合使用:xml用来管理bean,注解只用来完成属性注入。
- ----------------Spring注解开发----------
- 需要确保项目中有3样存在:1、上文在.xml开启context对注解的支持<context:annotation-config/>;和扫描注解位置<context:component-scan base-package="com.litao.controller"/>;2、在Maven中已经引入了SpringAOP依赖(建议引入Spring-webMVC依赖,已含AOP和web依赖)
- 注解和.xml的关系,进行替代:<bean>等于@Component、@Controller控制层、@Service业务层、@Repository持久层,功能一样,但不同名字区分不同MVC层级
- 但是我们从整体看,现在项目中有以下文件:(1).xml文件;(2)java代码和其注解。--------->能不能不要配置文件.xml(xml文件一般只用来Mybatis),全部使用java代码和注解实现(纯java形式在SpringBoot随处可见)。可以!Spring官方文档给出的解释:(原组件扫描<context:component-scan base-package="com.litao.controller"/>也被注解@ComponentScan(basePackages = "com.litao.controller")代替)
- 现在的启动IOCService流程:在Maven中引入SpringIOC依赖也相当是引入一种service服务,这service服务需要用配置类MyConfig(以前是配置文件.xml)进行配置,配置内容用注解来表示(以前.xml需要一行行代码表示配置内容,所以注解很大程度上等于了xml的配置内容),然后才能启动使用该服务。
-------------------------------SpringAOP切面开发是另外一个非常重要的板块-------------------------------
- ----------------SpringAOP面向切面----------OOP是面向对象编程
- 概念:众所周知,AOP原理是基于动态代理cglib的。为什么需要AOP面向切面?因为在实际开发中,修改原有的代码是大忌,很可能导致原有的程序出现未知错误(设计模式:开闭原则)。所以,需要在原来的基础上,进行横向开发。
- 同IOC一样,AOP也有启动流程,启动AOPService流程:在Maven中引入SpringAOP依赖AspectJ 也相当是引入一种service服务,这service服务需要用配置类MyConfig加上@EnableAspectJAutoProxy(或配置文件.xml则加上<aop:aspectj-autoproxy/>提供切面支持)进行配置,达到了配置内容用注解来表示,然后才能启动使用该服务,某类想启动用@Aspect。
- XML实现AOP:(图片来源网络)
- 注解实现AOP:
------------------------------------Spring声明式事务也是非常重要的板块-------------------------------
- Spring事务本质还是数据库innodb引擎对事务对事务的支持。只不过Spring用了声明式注解和xml方式来做事务。
- 事务传播行为:
- 事务隔离级别:五个,其中一个是默认,数据库是啥就是什么。其余四个与数据库一样。即读未提交,提交读,可重复读,序列化。
- 事务出现错误的情况:脏读(读到其它事务未提交的数据)、不可重复读(对select,两次读数据不一样)、幻读(对insert、delete,读的数据条目不一样)
------------------------------------Spring整合其它框架:Mybatis-Spring-----------------------------------------
- 以前的Mybatis官方文档(务必先了解“入门”):MyBatis中文网
- 现在的Mybatis-Spring官方文档(重要):mybatis-spring –
- Mybatis-Spring声明式事务:
- 后续持续更新...