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在容器中的生命周期
返回 说明
bean自身的方法 通过构造函数实例化,set,get方法设置属性,init,destroy方法初始化或者销毁
Bean级别生命周期接口 BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean
容器级别生命周期接口 InstantiationAwareBeanPostProcessor,BeanPostProcessor
   

ApplicationContext

同BeanFactory,但是会自动识别和装配后处理器;

spring笔记5 spring IOC的基础知识1的更多相关文章

  1. Spring Ioc源码分析系列--Ioc的基础知识准备

    Spring Ioc源码分析系列--Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为The IoC Containe ...

  2. 依赖注入(DI)与控制反转(IOC)基础知识

    依赖注入(DI)与控制反转(IOC)基础知识 一.什么是依赖注入? 依赖注入英文是Dependcy Injection简写DI,依赖注入会将所依赖的对象自动交由目标对象使用,而不是让对象自己去获取. ...

  3. 《Programming Hive》读书笔记(两)Hive基础知识

    <Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...

  4. tensorflow笔记(一)之基础知识

    tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...

  5. php面试笔记(5)-php基础知识-自定义函数及内部函数考点

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...

  6. php面试笔记(3)-php基础知识-运算符

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而运算符相关的考 ...

  7. spring笔记3 spring MVC的基础知识3

    4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...

  8. Spring笔记(4) - Spring的编程式事务和声明式事务详解

    一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...

  9. Spring笔记(6) - Spring的BeanFactoryPostProcessor探究

    一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...

  10. php面试笔记(2)-php基础知识-常量和数据类型

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...

随机推荐

  1. # PHP - 使用PHPMailer发邮件

    PHPMailer支持多种邮件发送方式,使用起来非常简单 1.下载PHPMailer https://github.com/PHPMailer/PHPMailer,下载完成加压后, 把下边的两个文件复 ...

  2. Autofac - 属性注入

    属性注入不同于通过构造函数方式传入参数. 这里是通过注入的方式, 在类创建完毕之后, 资源释放之前, 给属性赋值. 这里, 我重新弄一些类来演示这一篇吧. public class ClassA { ...

  3. App解读

    一直不懂别人口中说的原生开发.混合式开发.今天突然看了一篇文章讲解的是什么叫做原生App?移动 Web App?混合APP?分享给大家. 原生App是专门针对某一类移动设备而生的,它们都是直接安装到设 ...

  4. React Native环境配置之Windows版本搭建

    接近年底了,回想这一年都做了啥,学习了啥,然后突然发现,这一年买了不少书,看是看了,就没有完整看完的.悲催. 然后,最近项目也不是很紧了,所以抽空学习了H5.自学啃书还是很无趣的,虽然Head Fir ...

  5. SQLServer如何添加try catch

    在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...

  6. ASP.NET Aries 4.0 开源发布:已完成基础功能优化重写

    主要更新: 1:增加AR.Global.GetUser() 方法返回当前登陆者的用户信息. 2:重写AR.Combobox 支持下拉树. 3:调整及扩展Input下拉的配置参数. 4:优化及新增AR. ...

  7. linux系统下基于mono部署asp.net,使用ef6与mysql出现的问题【索引】

    git clone github.com/mono的源码,日期:2014-06-19,百度网盘链接:http://pan.baidu.com/s/1kTG9EUb 关于asp.net利用mono部署到 ...

  8. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  9. AutoMapper(五)

    返回总目录 Dynamic和ExpandoObject映射 AutoMapper不用任何配置就可以从dynamic(动态)对象映射或映射到dynamic对象. namespace FifthAutoM ...

  10. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...