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. JS图片上传预览插件制作(兼容到IE6)

    其实,图片预览功能非常地常见.很意外,之前遇到上传图片的时候都不需要预览,也一直没有去实现过.现在手上的项目又需要有图片预览功能,所以就动手做了一个小插件.在此分享一下思路. 一.实现图片预览的一些方 ...

  2. 使用github远程仓库

    经过几天对github的研究,终于把自己想完成的给解决了,发现google真的有很多解释,但是很多也会出现一些bug,对于初学者真的很多烦恼,所以整理一份,能给初识github的你有所帮助 一,首先, ...

  3. HTML 5 应用程序缓存manifest

    什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏 ...

  4. CRM 数据密钥 忘记 解决方案

    UPDATE EmailServerProfile SET IncomingPassword=nullUPDATE EmailServerProfile SET OutgoingPassword=nu ...

  5. bootstrap

    访问Bootstrap中文网,下载bootstrap中文文档,选择用于生产环境的bootstrap. 在官网使用ctrl+f查找想要的内容. 这里记一下Visual Studio Code软件的用法: ...

  6. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

  7. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  8. (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)

    一.  HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...

  9. Spring Boot -- Start Up

    做Java Web的同学,都知道项目启动需要放到servlet容器里面运行,无论是使用哪一款IDE,都是非常麻烦的一件事情.在很早之前,一个servlet容器下可以放下很多的项目,并一起运行,而到现在 ...

  10. 为革命保护视力 --- 给 Visual Studio 换颜色

    “为革命,保护视力,预防近视,眼保健操开始......” 这个应该是最老版本的眼保健操了,你听过? 一堆废话 且不说上面这个眼保健操到底有木有用,让眼睛放松下还是很有必要的,尤其是现在天天对着不是手机 ...