spring笔记5 spring IOC的基础知识1
1,ioc的概念
Inverse of control ,控制反转,实际的意义是调用类对接口实现类的依赖,反转给第三方的容器管理,从而实现松散耦合;
ioc的实现方式有三种,属性注入,构造函数注入,接口注入,常用的是前面两种,后面的对类的侵入性太大,一般不用;
spring就是一个第三方的依赖管理+容器,很轻松高效的实现了实例的创建,依赖关系的管理等底层功能,此外,还有Guice,plexus等第三方容器。
2,反射
每个对象在jre中都有一个Class对象,保存着它的元数据信息,通过Class对象,可以间接的访问对象的属性和方法;
类加载器:四类类加载器:
| 加载器 | 说明 | 补充 |
| 根加载器 | 加载jre的核心类库 | |
| ExtClassLoader | 加载jre的扩展类库 | |
| AppClassLoader | 加载项目的classpath下的类 | |
| 自定义ClassLoader | 具体用途来定 |
采用全盘负责委托机制,即除非显示使用另外一个ClassLoader,或者使用原来的classLoader加载该类,以及引用类,依赖类;先委托父加载器寻找目标类,找不到的情况下再从自己的类路径中查找并装载目标类;
利用反射获取构造方法,方法,字段,包,注解等信息,实例略;
3,资源接口
Resource,
实现类:
来个例子:
@Test
public void getResource() throws IOException { Resource resource =new ClassPathResource("log4j.properties"); String fileName= resource.getFilename(); String content= FileUtils.readFileToString(resource.getFile(), Charsets.UTF_8.name()); logger.info(fileName + " 内容:" + content); } 执行结果:
2013-11-20 11:28:59 web.TestResource.getResource(32)---[0]
[INFO] log4j.properties 内容:log4j.rootCategory=INFO, stdout,file
###. ������Ϊ stdout ������˵�����
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %C.%M(%L)---[%r]%n[%p] %m%n
spring定义了一套资源加载接口ResourceLoader:支持ant风格和特殊标识:
| 特殊标识 | 意义 |
| classpath: | 类路径中加载 |
| file: | 文件目录中加载,可使用绝对路径 |
| ftp:// | ftp服务器中加载 |
| http:// | http服务器中加载 |
| ? | 匹配一个字符 |
| * | 匹配任意个字符 |
| ** | 匹配多级路径 |

实现类:

不过spring中最常用的是PathMatchResourcePatternResolver,支持ant风格和特殊标识
4,三大接口BeanFactory ,ApplicationContext,WebApplicationContext的理解
先看BeanFactory,最常见的是XmlBeanFactory,来张层级图;

各种接口定义了XmlBeanFactory的功能:
| 接口 | 功能 |
| BeanFactory | 获取bean,简称,判断是否存在,是否单例 |
| ListableBeanFactory | 集合形式查看bean |
ApplicationContext, spring容器,层级图,通过继承相关的接口,有了相关的功能;

可以通过xml,注解,java类来配置ApplicationContext
BeanFacotry是惰性初始化,第一次调用的时候才会组装好资源;
ApplicationContext是启动的时候初始化好了所有的资源;
WebApplicationContext ,spring web容器;
spring web 容器依赖ServletContext,在web项目中必须配置才能完成启动,同时必须配置日志依赖;
可以通过ContextLoaderServlet(现在的最新版本里已经去掉 3.2.5)或者ContextLoaderListener来完成启动
5,bean的生命周期
BeanFactory
| 返回 | 说明 |
| bean自身的方法 | 通过构造函数实例化,set,get方法设置属性,init,destroy方法初始化或者销毁 |
| Bean级别生命周期接口 | BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean |
| 容器级别生命周期接口 | InstantiationAwareBeanPostProcessor,BeanPostProcessor |
ApplicationContext
同BeanFactory,但是会自动识别和装配后处理器;
spring笔记5 spring IOC的基础知识1的更多相关文章
- Spring Ioc源码分析系列--Ioc的基础知识准备
Spring Ioc源码分析系列--Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为The IoC Containe ...
- 依赖注入(DI)与控制反转(IOC)基础知识
依赖注入(DI)与控制反转(IOC)基础知识 一.什么是依赖注入? 依赖注入英文是Dependcy Injection简写DI,依赖注入会将所依赖的对象自动交由目标对象使用,而不是让对象自己去获取. ...
- 《Programming Hive》读书笔记(两)Hive基础知识
<Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...
- tensorflow笔记(一)之基础知识
tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...
- php面试笔记(5)-php基础知识-自定义函数及内部函数考点
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...
- php面试笔记(3)-php基础知识-运算符
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而运算符相关的考 ...
- spring笔记3 spring MVC的基础知识3
4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...
- Spring笔记(4) - Spring的编程式事务和声明式事务详解
一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...
- Spring笔记(6) - Spring的BeanFactoryPostProcessor探究
一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...
- php面试笔记(2)-php基础知识-常量和数据类型
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...
随机推荐
- # PHP - 使用PHPMailer发邮件
PHPMailer支持多种邮件发送方式,使用起来非常简单 1.下载PHPMailer https://github.com/PHPMailer/PHPMailer,下载完成加压后, 把下边的两个文件复 ...
- Autofac - 属性注入
属性注入不同于通过构造函数方式传入参数. 这里是通过注入的方式, 在类创建完毕之后, 资源释放之前, 给属性赋值. 这里, 我重新弄一些类来演示这一篇吧. public class ClassA { ...
- App解读
一直不懂别人口中说的原生开发.混合式开发.今天突然看了一篇文章讲解的是什么叫做原生App?移动 Web App?混合APP?分享给大家. 原生App是专门针对某一类移动设备而生的,它们都是直接安装到设 ...
- React Native环境配置之Windows版本搭建
接近年底了,回想这一年都做了啥,学习了啥,然后突然发现,这一年买了不少书,看是看了,就没有完整看完的.悲催. 然后,最近项目也不是很紧了,所以抽空学习了H5.自学啃书还是很无趣的,虽然Head Fir ...
- SQLServer如何添加try catch
在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...
- ASP.NET Aries 4.0 开源发布:已完成基础功能优化重写
主要更新: 1:增加AR.Global.GetUser() 方法返回当前登陆者的用户信息. 2:重写AR.Combobox 支持下拉树. 3:调整及扩展Input下拉的配置参数. 4:优化及新增AR. ...
- linux系统下基于mono部署asp.net,使用ef6与mysql出现的问题【索引】
git clone github.com/mono的源码,日期:2014-06-19,百度网盘链接:http://pan.baidu.com/s/1kTG9EUb 关于asp.net利用mono部署到 ...
- deepsooncms在Ubuntu 14.04上部署教程
deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...
- AutoMapper(五)
返回总目录 Dynamic和ExpandoObject映射 AutoMapper不用任何配置就可以从dynamic(动态)对象映射或映射到dynamic对象. namespace FifthAutoM ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...