IOC容器
-
Spring 容器是 Spring 框架的核心。
-
容器管理他们的整个生命周期从创建到销毁。
-
Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans
-
IOC:把对象的控制权反转给Spring
-
IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
-
通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。
-
在Spring中BeanFactory是IOC容器的实际代表者。
1.与ApplicationContext
在创建Bean之前,首先需要创建IOC容器,Spring提供了IOC容器的两种实现方式:
BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,是面向Spring本身的,不是提供给开发人员实现的
ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext,而不是底层的FactoryBean
1.类的结构
-
BeanFactory:Spring底层的IOC实现(面向Spring框架)
-
…
-
ApplicationContext:面向程序员
-
ConfigurableApplicationContext:提供关闭或刷新容器对象方法
-
…
-
ClassPathXmlApplicationContext:基于类路径检索xml文件
-
FileSystemXmlApplicationContext:基于文件系统检索xml文件
2. Spring Bean的定义
bean对象是由Spring IOC容器管理的
bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。
这些 bean 是由用容器提供的配置元数据创建的,例如,在 XML 的表单中的 定义。
bean的常见属性
依赖注入数值问题
3.1 字面量数值
-
数据类型:基本数据类型及其包装类、String
-
语法:可以使用value属性或value标签
3.2 CDATA区
语法:<!CDATA[]>
作用:在xml中定义特殊字符的时候,使用CDATA区
比如,在Spring中,我们想要为一个属性进行赋值的时候,我们可以通过value属性或者是value标签来为属性赋值,如果赋值涉及一些特殊的字符,那么,我们就不能通过属性来赋值,而是要用value标签了赋值
3.3 外部已声明bean以及级联属性赋值
如果一个类中,有一个属性不是基本类型,包装类,String类,而是自定义的类型,那么我们就不可以使用value标签或value属性来为它赋值,而要使用ref来进行引用
级联属性更改数值会影响外部声明bean(ref赋值的是引用)
3.4内部bean(不会影响到外部bean)
-
概述内部类:在一个类中完整定义另一个类,当前类称之为内部类内部bean:在一个bean中完整定义另外一个bean,当前bean称之为内部bean
-
注意:内部bean不会直接装配到IOC容器中代码
<!-- 测试内部bean--> <bean class=""> <property name="id" value="102"></property> <property name="lastName" value="xx"></property> <property name="email" value="xx@"></property> <property name="salary" value="60"></property> <property name="dept"> <bean class=""> <property name="deptId" value="2"></property> <property name="deptName" value="人事部"></property> </bean> </property> </bean>
3.5集合
3.5.1 list注入
<!-- 测试list注入--> <bean class=""> <property name="deptName" value="策划部"></property> <property name="empList"> <list> <ref bean="emp1"></ref> <ref bean="emp2"></ref> </list> </property> </bean>
3.5.2 map注入
<!--测试map--> <bean class=""> <property name="deptId" value="5"></property> <property name="deptName" value="采购部"></property> <property name="empMap"> <map> <entry> <key> <value>101</value> </key> <ref bean="emp2"></ref> </entry> <entry> <key> <value>103</value> </key> <ref bean="emp1"></ref> </entry> </map> </property> </bean>
IOC容器
- Spring 容器是 Spring 框架的核心。
- 容器管理他们的整个生命周期从创建到销毁。
- Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans
- IOC:把对象的控制权反转给Spring
- IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
- 通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。
- 在Spring中BeanFactory是IOC容器的实际代表者。
1.与ApplicationContext
在创建Bean之前,首先需要创建IOC容器,Spring提供了IOC容器的两种实现方式:
BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,是面向Spring本身的,不是提供给开发人员实现的
ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext,而不是底层的FactoryBean
1.类的结构
- BeanFactory:Spring底层的IOC实现(面向Spring框架)
- …
- ApplicationContext:面向程序员
- ConfigurableApplicationContext:提供关闭或刷新容器对象方法
- …
- ClassPathXmlApplicationContext:基于类路径检索xml文件
- FileSystemXmlApplicationContext:基于文件系统检索xml文件
2. Spring Bean的定义
bean对象是由Spring IOC容器管理的
bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。
这些 bean 是由用容器提供的配置元数据创建的,例如,在 XML 的表单中的 定义。
bean的常见属性
依赖注入数值问题
3.1 字面量数值
- 数据类型:基本数据类型及其包装类、String
- 语法:可以使用value属性或value标签
3.2 CDATA区
语法:<!CDATA[]>
作用:在xml中定义特殊字符的时候,使用CDATA区
比如,在Spring中,我们想要为一个属性进行赋值的时候,我们可以通过value属性或者是value标签来为属性赋值,如果赋值涉及一些特殊的字符,那么,我们就不能通过属性来赋值,而是要用value标签了赋值
3.3 外部已声明bean以及级联属性赋值
如果一个类中,有一个属性不是基本类型,包装类,String类,而是自定义的类型,那么我们就不可以使用value标签或value属性来为它赋值,而要使用ref来进行引用
级联属性更改数值会影响外部声明bean(ref赋值的是引用)
3.4内部bean(不会影响到外部bean)
- 概述内部类:在一个类中完整定义另一个类,当前类称之为内部类内部bean:在一个bean中完整定义另外一个bean,当前bean称之为内部bean
- 注意:内部bean不会直接装配到IOC容器中代码
-
<!-- 测试内部bean-->
-
<bean id="emp2" class="">
-
<property name="id" value="102"></property>
-
<property name="lastName" value="xx"></property>
-
<property name="email" value="xx@"></property>
-
<property name="salary" value="60"></property>
-
<property name="dept">
-
<bean id="dept" class="">
-
<property name="deptId" value="2"></property>
-
<property name="deptName" value="人事部"></property>
-
</bean>
-
</property>
-
</bean>
3.5集合
3.5.1 list注入
-
<!-- 测试list注入-->
-
<bean id="dept2" class="">
-
<property name="deptName" value="策划部"></property>
-
<property name="empList">
-
<list>
-
<ref bean="emp1"></ref>
-
<ref bean="emp2"></ref>
-
</list>
-
-
</property>
-
</bean>
3.5.2 map注入
-
<!--测试map-->
-
<bean id="dept5" class="">
-
<property name="deptId" value="5"></property>
-
<property name="deptName" value="采购部"></property>
-
<property name="empMap">
-
<map>
-
<entry>
-
<key>
-
<value>101</value>
-
</key>
-
<ref bean="emp2"></ref>
-
</entry>
-
<entry>
-
<key>
-
<value>103</value>
-
-
</key>
-
<ref bean="emp1"></ref>
-
</entry>
-
-
</map>
-
</property>
-
</bean>