可以通过前台debug和后台debug的方式,一步步的联调,会得到如下结果。
大学英语四、六级学习词典 崔彦萍 邱国旺 主编 赵玉娥 主审 河北大学出版社 责任编辑:王善军 封面设计:王占梅 责任印制:李晓敏 图书在版编目( )数据 DJQ 大学英语四、六级学习词典/崔彦萍,邱国旺主编
从事JAVA开发的给小伙伴都知道,Spring是java开发当中必不可少的一个框架,不管是面试、开发还是工作当中,Spring的地位现在是独树一帜。比如现在SpringBoot,SpringColud等都是目前开发当中很火的框架。
截止到目前Spring 框架已集成了 20 多个模块 。 这些模块主要被分如下图所示的核心容器 、 数据访问 / 集成 、Web、AOP (面向切面编程) 、 工具 、 消息和测试模块 。
依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。
在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。
在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态 。 同样的,当一个 bean 不在被调用时需要进行相关的析构操作,并从 bean 容器中移除 。
初始化之后调用的回调方法。
销毁之前调用的回调方法。
实际上,大部分的 Spring bean 并没有可变的状态 ( 比如 Service 类和 DAO 类 ) ,所以在某种程度上说 Spring 的单例 bean 是线程安全的 。 如果你的 bean 有多种状态的话(比如 View Model 对象),就需要自行保证线程安全 。
Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的:
单例模式 — 在 spring 配置文件中定义的 bean 默认为单例模式 。
工厂模式 —BeanFactory 用来创建对象的实例 。
原理: AOP 是面向切面编程,是通过动态代理的方式为程序添加统一功能,集中解决一些公共问题 。
* 各个步骤之间的良好隔离性耦合性大大降低 。
* 源代码无关性,再扩展功能的同时不对源码进行修改操作。
1、编程式事务,在代码中硬编码。(不推荐使用)
2、声明式事务,在配置文件中配置(推荐使用)
声明式事务又分为两种:
a、基于XML的声明式事务
b、基于注解的声明式事务
BeanFactory:产生一个新的实例,可以实现单例模式。
优点:因为有接口,所以使系统更加松耦合
2、若目标对象没有实现任何接口, spring 则使用 CGLIB 库生成目标对象的子类 。
优点:因为代理类与目标类是继承关系,所以不需要有接口的存在 。
缺点:因为没有使用接口,所以系统的耦合性没有使用 JDK 的动态代理好 。
BeanFactory 是 Spring 里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和获取对象的功能 。
优点: 应用启动时占用资源很少,对资源要求较高的应用,比较有优势。
缺点:速度会相对来说慢一些 。 而且有可能会出现空指针异常的错误,而且通过 bean 工厂创建的 bean 生命周期会简单一些。 所有的 Bean 在启动的时候都加载,系统运行的速度快,而且可以尽早的发现系统中的配置问题 。
建议 web 应用,在启动的时候就把所有的 Bean 都加载了 。
Spring AOP 使用的是动态代理,所谓的动态代理就是说 AOP 框架不会去修改字节码,而是在内存中临时为方法生成一个 AOP 对象,这个 AOP 对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法 。
* JDK 动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口 。JDK 动态代理的核心是 InvocationHandler 接口和 Proxy 类 。
* 如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类 。CGLIB ( Code Generation Library ),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意, CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final ,那么它是无法使用 CGLIB 做动态代理的 。
如果你喜欢本文或者对你有所帮助,那你请扫描下面的二维码加以关注,小编将持续更新新的技术活着文章供您参考。