回顾Spring
文章目录
概述
spring是分层的JavaSE/EE应用full-stack轻量级开源框架,以Ioc和Aop为内核,提供了展现层(SpringMVC)和持久层(JdbcTemplate)以及业务层事务管理等众多的企业及应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的JavaEE企业应用开源框架.
bean工厂+灵活装配+动态行为拼接,成就spring在java框架中的一哥地位。
优势
-
方便解耦,简化开发
-
AOP编程支持
-
声明式事务
-
方便程序测试
-
方便集成各种优秀框架
降低各种框架的使用难度(Struts、Hibernate、Hessian、Quartz等).
-
降低JavaEEAPI使用难度
Spring对JavaEEAPI(如JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些API的使用难度大大降低.
-
Java源码是经典学习案例
Spring源代码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣.他的源代码无疑是Java技术的最佳实践的范例.
体系结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31iZSYhF-1594778521129)(/Users/zoujidi/Library/Application Support/typora-user-images/image-20200707223259299.png)]
IOC(Inversion Of Control)
把创建对象的权利交给框架,是框架的重要特征,并非面向对象的专业术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)
无BeanFactory前:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-syV6XGwT-1594778521131)(/Users/zoujidi/Library/Application Support/typora-user-images/image-20200708200823182.png)]
有了BeanFactory后(减少程序间的耦合):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EX0fcOTk-1594778521133)(/Users/zoujidi/Library/Application Support/typora-user-images/image-20200708200838521.png)]
这种被动的方式获取对象的思想就是控制反转,它是spring框架的核心之一。
明确IOC的作用:
削减计算机中的耦合(解除我们代码中的依赖关系)。
基于注解的IOC配置
xml或注解,仅仅是配置的形式不一样.实现功能都一样,都要达到解耦的目的.
事务控制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Fmori3D-1594778521135)(/Users/zoujidi/Library/Application Support/typora-user-images/image-20200712211159140.png)]
AOP
全称:Aspect Oriented Programming,即面向切面编程。
作用:在程序运行期间,不修改源代码的基础上对已有方法进行增强。
优势:减少重复代码;提高开发效率:维护方便。
在spring中,框架会根据目标类是否实现了接口来决定用哪种动态代理的方式。
AOP相关概念:
1、Joinpoint:连接点,所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
2、Pointcut:切入点,所谓切入点是指我们要对哪些Joinpoint进行拦截的定义。
3、Advice:(通知/增强),所谓通知是指拦截到Joinpoint之后要做的事情就是通知。
通知的类型:前置通知、后置通知、异常通知、最终通知、环绕通知
![image-20200713150512114](/Users/zoujidi/Library/Application%20Support/typora-user-images/image-20200713150512114.png)
4、Introduction:引介,引介是一种特殊的通知,在不修改类代码的前提下,Introduction可以在运行期为类动态的添加一些方法或者Field
5、Tartget:目标对象,代理的目标对象
6、Weaving:织入,是指把增强应用到目标对象来创建新的代理对象的过程。
spring采用动态代理织入,而AspectJ采用编译器织入和类装载期织入。
7、Proxy:代理,一个类被AOP织入增强后,就产生了一个结果代理类。
8、Aspect:切面,是切入点和通知(引介)的结合。
JdbcTemplate
他是spring框架中提供的一个对象,是对原始Jdbc API对象的一个简单封装。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xc4QFyzn-1594778521136)(/Users/zoujidi/Library/Application Support/typora-user-images/image-20200713220332774.png)]
spring框架为我们提供了很多操作的模板类:
操作关系型数据库的:
JdbcTemplate、
HibernateTemplate
操作nosql数据库的:
RedisTemplate
操作消息队列的:
JmsTemplate
jdbcTemplate作用:用于和数据库交互的,实现对表的CRUD操作
![image-20200714102722327](/Users/zoujidi/Library/Application%20Support/typora-user-images/image-20200714102722327.png)
Spring的事务控制
我们需要明确:
1、JavaEE的分层开发,事务处理位于业务层,spring提供了分层设计中业务层的事务处理方案;
2、spring框架为我们提供了一组业务处理接口,接口位于spring-tx.xxx.jar中;
3、spring的事务控制都是基于aop的,他既可以使用编程的方式实现,也可以使用配置的方式实现,重点掌握配置的方式
jdk8(@Nullable和@NotNull)
用@Nullable和@NotNull注解来显示表明可以空的参数和以及返回值,这样就可以在编译的时候处理空值而不是在运行的时候抛出NullPointerExceptions。