1,ioc的概念

  Inverse of control ,控制反转,实际的意义是调用类对接口实现类的依赖,反转给第三方的容器管理,从而实现松散耦合;

ioc的实现方式有三种,属性注入,构造函数注入,接口注入,常用的是前面两种,后面的对类的侵入性太大,一般不用;

spring就是一个第三方的依赖管理+容器,很轻松高效的实现了实例的创建,依赖关系的管理等底层功能,此外,还有Guice,plexus等第三方容器。

2,反射

  每个对象在jre中都有一个Class对象,保存着它的元数据信息,通过Class对象,可以间接的访问对象的属性和方法;

类加载器:四类类加载器:

加载器说明补充
根加载器加载jre的核心类库 
ExtClassLoader加载jre的扩展类库 
AppClassLoader加载项目的classpath下的类 
自定义ClassLoader具体用途来定 

采用全盘负责委托机制,即除非显示使用另外一个ClassLoader,或者使用原来的classLoader加载该类,以及引用类,依赖类;先委托父加载器寻找目标类,找不到的情况下再从自己的类路径中查找并装载目标类;

利用反射获取构造方法,方法,字段,包,注解等信息,实例略;

3,资源接口

  Resource,

spring笔记5 spring IOC的基础知识1-LMLPHP 实现类:spring笔记5 spring IOC的基础知识1-LMLPHP

来个例子:

    @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笔记5 spring IOC的基础知识1-LMLPHP

实现类:

spring笔记5 spring IOC的基础知识1-LMLPHP

不过spring中最常用的是PathMatchResourcePatternResolver,支持ant风格和特殊标识

4,三大接口BeanFactory ,ApplicationContext,WebApplicationContext的理解

先看BeanFactory,最常见的是XmlBeanFactory,来张层级图;

spring笔记5 spring IOC的基础知识1-LMLPHP

各种接口定义了XmlBeanFactory的功能:

接口功能
BeanFactory获取bean,简称,判断是否存在,是否单例
ListableBeanFactory集合形式查看bean

ApplicationContext, spring容器,层级图,通过继承相关的接口,有了相关的功能;

spring笔记5 spring IOC的基础知识1-LMLPHP

可以通过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,但是会自动识别和装配后处理器;

04-27 01:49