Spring复习第一天
转眼间毕业已经快半年了, 这半年在公司开发基本上都是再写JS代码以及使用Vue,为了适应新环境以及学习前端,在学校以及实习是所用的Java技术基本上都已经快忘了.所以想趁着还没忘干净,赶紧复习起来,顺便写下博客记录下,方便以后复习.加油!!
1. Spring是什么:
这个问题很简单,Spring就是春天啦 哈哈哈 嗝~, Spring是分层的javaSE/EE full-stack轻量级开源框架,以Ioc(Iverson of Control 控制反转) 和 Aop(
Aspect Oriented Programming) 面向切面编程 为内核
2. Spring的优势:
① 方便解耦,简化开发
根据spring提供的Ioc容器,将对象间的依赖关系交由Spring来控制,避免硬编码造成代码的过度耦合
② AOP编程的支持
通过Spring的AOP功能,可以进行面向切面编程,许多不易通过OOP(面向对象编程)实现的功能,可以通过AOP轻松实现
③ 声明式事物的支持
对比以前学习的JDBC通过Connection.setAutoCommit()开启事务Connection.Commit()提交事务单调烦闷,Spring可以通过配置文件或者注解轻松实现
④ 方便程序的测试
Spring很好的集成了junit 方便程序的测试
⑤ Spring集成了各种优秀的框架
⑥ Spring对javaEE的Api进行封装,降低了Api的使用难度
3. Spring的开发步骤:
① 导入Spring开发的基本坐标
② 编写接口以及实现类
③ 创建Spring的核心配置文件
④ 在Spring核心配置文件中配置对应的bean
说了这么多,开始撸代码了.今天复习下通过配置文件的方式使用Spring.
根据步骤来,首先在maven中导入一哈Spring的坐标
然后再编写接口以及实现类
然后创建Spring的核心配置文件(applicationContext),以及配置bean
最后我们就可以通过ApplicationContext类的ClassPathXmlApplicationContext传入核心配置文件的名称来使用Spring容器中的bean了.
使用Spring很愉快的调用的userDao中的save()方法
既然今天是使用配置文件的方式来复习Spring,那就再看看配置文件applicationContext中bean标签除了指定id(唯一标识),class(对应全类名)还有那些属性
第一个要说的就是通过scope来指定的作用域了,作用域一共有五个 其中最常用的两个就是Singleton(单例的) 以及 prototype(多例的), 如果不指定的话 默认使用的是Singleton(单例的) 那么这两个有什么区别呢? 实践是检验真理的唯一标准 试一哈就晓得了
首先在这个配置文件中配置一下scope 为singleton
然后我们知道普通配置的bean对象,是通过无参构造来创建的,所以我们重写一下userDao的午餐构造,证明他被调用过
我想这就是光写了半年前端,不复习java的结果吧 啊哈哈哈,
好啦,接下来在测试类中看一下结果是怎么样的吧
当执行完加载配置文件,创建完Spring容器时,对象就已经创建了 再放开断点
执行完发现两个对象就是同一个
接下来再试一下prototype吧
spring容器创建完成后,并没有开始创建对象 只有当getBean方法调用是才会创建,而且是两个不同的对象
总结一下就是:
1)当scope的取值为singleton时
Bean的实例化个数: 1个
Bean的实例化时机: 当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载, 创建容器时,对象就被创建了
对象运行:只要容器在, 对象一直活着
对象销毁:当应用卸载, 销毁容器时,对象就被销毁了
2)当scope的取值为prototype时
Bean的实例化个数: 多个
Bean的实例化时机: 当调用getBean()方法时实例化Bean
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 GC回收了
我们还可以通过init-method和destroy-method配置bean的开始方法以及销毁方法.如下图:
执行结果如下:
上面说到 bean实例化主要是通过无参构造的方法,那么除了无参构造还有几种方法呢? 一共是三种
① 无参构造
② 静态工厂
③ 工厂实例
无参构造就不再这里撸了 之前的测试都是用的无参构造,接下来我们来撸一下静态工厂和工厂实例.
静态工厂比较简单,配置下factory-method就可以了
工厂实例呢,因为调用的不是静态方法,我们需要先配置一个工厂的bean,然后通过factory-bean指定工厂bean,再通过factory-method指定方法
执行一下,也是成功的
可是为什么会创建两次对象呢? 因为我们创建了配置两个bean,而他们都没有指定scope,所以默认为singleton,上面说过singleton的生命周期为容器创建时对象就创建,所以当创建容器时,两个bean都创建啦.
今天先复习到这里了,哈哈 我的去来一把紧张而刺激的恰鸡了