首页 > 代码库 > Spring Ioc学习(一)

Spring Ioc学习(一)

包含内容:什么是Ioc,作用,bean的创建,方式,配置,集合,作用域,不同作用与的bean依赖等

Ioc控制反转(Inversion of Control) 也被叫作DI依赖注入(Dependency Injection).在程序设计中经常使用到组合的形式,就是在一个类中使用到其他类的对象。Ioc就是用来当这个类实例化时,它里面所使用到的相关对象也会被实例化。实例化的方式有①构造器参数②方法参数③属性。

Spring容器启动是通过BeanFactory或ApplicationContext读取配置文件,该配置文件基本配置如下:


实例化容器方法:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"service.xml","daos.xml"});

service.xml代码如下:


daos.xml代码如下:



由配置文件可知PetStroreServiceImpl有两个成员变量SqlMapAccountDao和SqlMapItemDao

这样在创建PetStroreServiceImpl时,Spring Ioc也会实例化另外两个实例变量。

可以通过import属性,将配置文件分开,便于管理。


注意文件的位置,service.xml使用的相对路径必须在当前目录下有service.xml文件.对于messageSource.xml和themeSource.xml必须在resources下,前面的斜杠可以带可以不带,但一般不建议有。

容器使用:


配置文件中,每个<bean>都是一个BeanDefinition 对象,对于bean的定义有一下属性:



对bean的实例化:

1.最最基本的配置:


2.通过静态工场方法:

 

3.通过实体工场方法:

 

依赖注入:

由上可知:依赖注入可以通过三种方式进行1.构造器参数;2工厂方法参数;3属性注入。

 

 

 

 

通过方法注入。大多数应用场景中我们使用到的bean是单例的,但是存在一种情况,就是一个单例的类中含有某个非单例的成员变量。


Bean的作用域:


当定义一个Bean的作用域定义为Singleton时,spirng Ioc容器会创建一个实例放入缓存中,对于所有的请求将都会返回缓存中的这个Bean。且spring默认bean为单例。


Prototype作用域:



Spirng容器不管理prototype Bean的整个生命周期。


在一个单例的bean里面拥有prototype-bean:


Request,Session,Global Session三个作用域是结合web之后才有的作用域。初始化web配置:


web不同作用域间的bean的相互依赖定义:



下面这种情况与上面对比:注意不同



自定义作用域需要实现org.springframework.beans.factory.config.Scope接口

这种情况感觉使用比较少,就不看了。