Spring IoC
Spring核心容器的理论很简单:Spring容器就是一个超级大工厂,对Spring框架而言,一切Java对象 都是Bean。
<bean id="xx" calss="xxx">
<!--控制调用setAxe()方法,将容器中的axe Bean作为传入参数-->
<property name="axe" ref="axe">
</bean>
....
<bean id ="axe"......>
配置文件中的<bean../>元素驱动Spring以反射的方式来调用无参构造器来创建对象。
Spring框架的核心功能有2个:
1、Spring容器作为超级大工厂,负责创建、管理所有Bean
2、Spring使用依赖注入的方式来管理Bean之间的依赖关系
设置注入:通过setter方法为目标Bean注入依赖关系的方式,上面那种。
构造注入:每个<constructs-arg ..>子元素代表一个构造器参数,有N个,则表示Spring会调用带N个参数的
构造器来创建对象:
<bean id="xx" calss="xxx">
<!--控制调用setAxe()方法,将容器中的axe Bean作为传入参数-->
<constructs-arg ref="axe">或者<constructs-arg value="hello">
</bean>
这种方式会在Bean创建完成后也完成了依赖关系的注入,比设置注入早?
Spring有2个核心接口:BeanFactory和他的子接口ApplicationContext ,他们都可以代表Spring容器
//创建Spring容器,也可以把ApplicationContext 实例赋值给BeanFactory变量
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
系统创建ApplicationContext容器后,接着会默认初始化所有的singleton Bean,可以在<bean...>中指定
lazy-init="true",懒加载属性用于阻止容器预初始化Bean,但是仍有可能会被预初始化,因为可能被注入到
一个非延迟的singleton Bean中
大部分时候使用的是ApplicationContext实例作为Spring容器(Spring上下文),ApplicationContext是BeanFactory的子接口,
它增强了BeanFactory的功能。