首先,本人正在学习spring,这是一点心得体会,因此本文中会有不足、错误之处,欢迎各位大佬进行指点。java
其次对于框架而言,知道反射是很重要,因此建议在学会反射了后在去看看框架。spring
Spring:是企业级java生态应用中的一个开源、轻量级的软件开发框架(半成品)
做用:主要就是经过软件开发中的共性进行封装、抽象、组合等方式来简化软件开发过程,下降运营成本和开发周期
总结:就是用于资源整合,方便开发减小开发量。框架就是一个工具,用来方便开发的工具。
那么,咱们如今介绍的spring底层运行的一些机制,因此在介绍上比较复杂,那么在整个讲解过程反可能会产生spring这么麻烦的感受,首先在这里进行一些解释。框架
Spring中的核心模块:eclipse
1) IOC 模块(控制反转容器):对象建立,对象存储,对象依赖管理。maven
2) DATA 模块(整合JDBC,MyBatis,JPA,....)工具
3) MVC 模块(重点解决与表示层通信问题)单元测试
4) AOP 模块(重点解决对象功能扩展问题)学习
5).............测试
IOC模块,spa
介绍:Spring中有一个核心的容器,这个容器一般称之为IOC容器,那么这个容器的核心思想是控制反转思想的实现。
它能够负责对象的建立,对象的存储(map),对象的管理(依赖查找,依赖注入)。
在框架中的地位:
建立过程:在eclipse中建立一个maven项目,添加spring依赖和xml的配置文件,而后编写一个类,在编写一个单元测试类,用于建立对象
问题:
1)如何将HelloService对象交给Spring管理?
2)Spring如何构建此类的对象?
3)Spring如何存储此对象?
其中最为关键的是spring-configs.xml文件中的Bean标签
Spring中能够经过bean标签描述由它管理的对象
1)id属性的值为bean对象的惟一标识
2)class属性的值为类全名(包名+类名)
好比:<bean id="hello" class="beans.Hello"></bean>
如何测试?
1.初始化Spring框架的IOC对象,解析XML文件,储存配置信息
好比:ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-configs.xml");
2.获取Bean对象,内容包含了:什么时候建立、如何建立、从哪里获取对象
好比:Hello hello = ctx.getBean("hello",Hello.class);
3.应用Bean对象
好比:hello.sayHello();
4.释放资源
好比:ctx.close();
在整个Spring框架中Bean对象是核心,那么接下来咱们来谈谈Bean对象的基本配置
Bean对象:在软件应用中只要是被Spring管理的因此对象都是属于Bean对象
Bean的构建方式有来两种:1.直接经过构造方法 2.经过工厂对象的实例方法
1.经过构造方法、静态方法、实例及实例方法进行构造对象 注意:在构造方法的时候都会用到反射机制
2.工厂对象:(1)经过FactoryBean的getObject方法建立类的实例,定义一个工厂对象,此类型的交给FactoryBean建立实例
(2)定义一个Bean工厂ObjectFactoryBean(要实现FactoryBean接口),此工厂要建立ObjectFactory类型对象,而后将此对象交给Spring管理。
具体的代码就是不写了,你们能够在网上搜索 Spring IOC建立Bean对象的方法 会有不少的方法和例子,你们能够本身去尝试作一下
Bean的做用域
1) singleton (这个做用域标识的对象具有全局惟一性):系统默认
2) prototype(这个做用域标识的对象每次获取都会建立新的对象)
那么Bean对象其实你们应该知道很重要了,那么接下来我就像谈谈关于Bean对象的生命周期
Bean对象是有生命周期的,它的生命周期包括了:建立、初始化、服务、销毁整个运行的过程,那么咱们能够经过Init-method,destory-method属性指定bean的生命周期方法
好比:
注意:关于Bean对象的销毁是否由Spring是取决于Bean的的做用域:
1) singleton做用域的对象能够在容器关闭时销毁(会调用对象的销毁资源的方法)
2) prototype做用域的对象能够由容器建立对象,初始化对象,但不负责销毁.
这就是在学习了Spring IOC的一点点心得,说得很浅,不是很深,有错误的地方还望各位大佬指导下!