Spring 的core Container(Spring的核心容器)有四大部分:bean、context、core、expression
在进行Bean的配置时候,需要添加四个jar包 如下:
分别对应着四大核心部分,最后一个是Apache的日志接口。
今天先了解IOC和DI:
1、IOC(反转控制):反转资源获取的方向。传统的资源查找是组件向容器请求查找资源。
IOC则是容器主动将资源推送给它管理的组件,组件所要做的是选择一种合适的方式接受资源。
在完成添加后,对Spring 的配置文件进行一个最简单的Bean的配置.
1.在项目中添加Source Folder文件(个人习惯)
2.新建一个配置文件.以xml结尾,这里命名为application.xml
3.在配置文件里写入头部的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" </bean>
4.在声明完配置之后,进行简单的编写
(1).首先先声明一个对象,这里命名为:User,并有name,age一个String,一个int类型的属性,并进行setter/getter
(2).Spring的基本配置
id:在spring配置里,id和name属性都能定义bean元素的名称
可以使用name属性为bean元素起多个名,之间可以使用空格或者逗号隔开(不推荐)。
在开发中,尽量使用id定义bean元素名称
class:则是该id所对应的类,class里所写的一定是要类的完全限定名
(3) 编写main方法,获取User对象
使用ApplicationContext获取IOC容器,参数所需写的是配置文件的名称
使用ApplicationContext对象的getBean方法取得Bean对象,参数写的是第三步填写的唯一标识id
打印user,即可获取user对象的地址
以上是SpringIOC容器配置Bean的简单步骤!
2、DI(依赖注入):IOC的另一种表述方式,组件以一些预先定义好的方式接受来自容器的资源注入。
Spring中支持三种依赖注入方式:1、属性注入 2、构造器注入 3、工厂方法注入
2.1 属性注入:属性注入即通过Setter方法注入Bean的属性值或依赖的对象。 使用<property>元素
<bean id="user" class="com.spring.ioc.User" scope="singleton">
<!-- 通过Setter方法注入 是开发中最常用的方式 name代表属性名称 value代表属性值 -->
<property name="age" value=""></property>
</bean>
2.2构造方法注入:通过构造方法注入Bean的属性值或者依赖的对象,保证Bean在实例化后能使用。
构造器在<constructor-arg>元素里声明属性。注意:该元素没有name属性。
<!-- 使用构造器进行属性注入 前提是要有构造方法 带参数
value:属性值
index:索引位置
type:数据类型
为了区分重载方法的构造器,使用index会更好
-->
<bean id="car" class="com.spring.ioc.Car">
<constructor-arg value="baoma" index="" type="String"></constructor-arg>
<constructor-arg value="" index="" type="int"></constructor-arg>
</bean>
同时,也可以使用 ref属性建立bean之间的关系。
<bean id="user3" class="com.spring.ioc.User">
<property name="name" value="tom"></property>
<property name="age" value=""></property>
<property name="car" ref="car"></property>
</bean>
输出的结果为:User [age=13, name=tom, car=Car [carname=baoma, carprice=134]]
上面的ref引用的是外部bean,也就意味着我们可以用内部bean,如下代码:(不能被外部Bean引用)
<bean id="user3" class="com.spring.ioc.User">
<property name="name" value="tom"></property>
<property name="age" value=""></property>
<!-- <property name="car" ref="car"></property> -->
<!-- 内部bean -->
<property name="car">
<bean id="carbean" class="com.spring.ioc.Car">
<constructor-arg value="baoma" index="" type="String"></constructor-arg>
<constructor-arg value="" index="" type="int"></constructor-arg>
</bean>
</property>
</bean>
配置集合属性的值
一般使用如<list>、<set>、<map>来配置集合属性。
而我们在集合属性中能通过<value>指定简单的常量值。也能使用<ref>指定其他Bean的引用。甚至能用内部Bean.
<!-- 配置集合属性
能使用list set等集合元素的属性
能通过<value>的标签指定简单的常量,也可以使用ref引用其他Bean,也可以进行内部Bean
-->
.....省略Bean配置...
<bean id="users" class="com.spring.ioc.User">
<property name="name" value="zhansan"/>
<property name="age" value=""/>
<property name="car">
<list>
<ref bean="car"/>
<ref bean="carbean"/>
<bean id="carbean2" class="com.spring.ioc.Car">
<constructor-arg value="falali" index="" type="String"></constructor-arg>
<constructor-arg value="" index="" type="int"></constructor-arg>
</bean>
</list>
</property>
用properites配置Map的属性值
<!-- 配置properties属性值
使用props 和prop字节点尾属性赋值
-->
<bean id="dataSource" class="com.spring.ioc.DataSource">
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">test</prop>
<prop key="jdbcUrl">jdbc:mysql://test</prop>
</props>
</property>
</bean>