小编教您Spring是什么、spring容器、IOC和DI

986 阅读4分钟

1.Spring (1)Spring是什么? 是一个轻量级的、用来简化企业级应用开发的开发框架。

注: a.简化开发: Spring对常用的api做了简化,比如,使用Spring jdbc来访问数据库,就不用再考虑如何获取连接、关闭连接、处理异常等等。 b.解耦: Spring容器(Spring框架的一个模块)帮我们管理 对象(包括对象的创建及对象之间的依赖关系), 这样一来,对象之间的耦合度会大大降低,提供高了 系统的维护性。 c.集成其它框架: Spring可以将其它一些常用的框架集成进来,比如 可以将Quartz,MyBatis等集成进来。 (2)Spring容器 1)Spring容器是什么? Spring框架的一个核心模块,用于管理对象。

注: 管理对象指的是,spring容器会用我们创建对象, 并且建立对象之间的依赖关系。 2)如何启动Spring容器? step1.导包。

org.springframework spring-webmvc 3.2.8.RELEASE step2.添加配置文件(applicationContext.xml)。

将配置文件添加到main/resources下。 step3.启动Spring容器。

ApplicationContext ac = new ClassPathXmlApplicationContext( "applicationContext.xml"); 3)创建对象 a.方式一  使用无参构造器

step1. 给类添加无参构造器(缺省构造器)。 step2. 在配置文件当中,使用bean元素来进行配置。

<bean id="ap1" class="first.Apple"/>

step3. 启动容器,调用容器提供的getBean方法。

//通过容器获得对象
Apple ap1 = 
    ac.getBean("ap1",Apple.class);

b.方式二  使用静态工厂方法 (了解)

c.方式三  使用实例工厂方法 (了解)

4)作用域 a.默认情况下,对于某个bean,容器只会创建一个实例。

b.如果要让容器创建多个实例,需要设置bean的作用域。

<bean id="eb1" 
    class="basic.ExampleBean" 
    scope="prototype"/> 

5)生命周期 spring容器在创建好对象之后,会调用初始化方法, 在销毁该对象之前,会调用销毁方法。

<!-- 
    init-method属性:  指定初始化方法
    destroy-method属性:指定销毁方法。
    注:
        销毁方法只有当作用域为singleton
        才有效。
 -->    
<bean id="mb1" 
class="basic.MessageBean" 
init-method="init" 
destroy-method="destroy" 
scope="singleton"/> 

6)延迟加载 a.默认情况下,容器启动之后,会将所有作用域为singleton的bean实例化。

b.延迟加载指的是,通过设置lazy-init="true"告诉容器, 启动之后不再创建其实例。

<!-- 
    lazy-init属性如果值为true,表示
    延迟加载。
 -->
<bean id="lb1" class="basic.LazyBean" 
lazy-init="true"/>

(3)IOC和DI 1)IOC是什么? (Inversion Of Controll 控制反转) 对象之间的依赖关系应该由容器来建立。

2)DI是什么? (Dependency Injection 依赖注入) 容器通过调用set方法或者构造器来建立对象之间的依赖关系。

注: IOC是目标,DI是手段。 3)set方法注入 step1. 为类添加set方法。

step2. 在配置文件当中,使用property元素来配置set 方法注入。

<!-- 
    property元素表示采用set方法注入。
    name属性用于指定set方法名
    (容器会将b大写,前面添加set来
    构造方法名)。
    ref属性用于指定被注入的bean的id。
 -->
<bean id="a1" class="ioc.A">
    <property name="b" ref="b1"/>
</bean>

step3. 启动容器,调用getBean方法。

3)set方法注入

4)构造器注入 step1. 添加相应的带参的构造器。

step2. 使用元素来配置构造器注入。

step3. 启动容器,调用getBean方法。

4)自动装配 (了解) a.什么是自动装配?

容器依据某些规则,自动查找符合要求的对象, 然后建立对象之间的依赖关系。 注: 容器仍然要调用set方法或者构造器。 b.如何自动装配?

使用autowire属性指定装配的规则:   5)注入基本类型的值 6)注入集合类型的值 a.支持四种集合类型的值的注入,分别是List,Set,Properties,Map。

b.注入方式如下:

<property name="interest">
        <list>
            <value>打猎</value>
            <value>看书</value>
            <value>编程</value>
            <value>编程</value>
        </list>
    </property>
<property name="city">
    <set>
        <value>洛阳</value>
        <value>金陵</value>
        <value>开封</value>
    </set>
</property>
<property name="score">
    <map>
        <entry key="english" 
            value="59.5"/>
        <entry key="math" 
            value="17"/>    
    </map>
</property>
<property name="db">
    <props>
        <prop key="username">tom</prop>
        <prop key="pwd">1234</prop>
    </props>
</property>

7)引用的方式注入集合类型的值 <util:list id="interestBean"> 打猎 看书 编程 </util:list> <util:set id="cityBean"> 北京 南京 东京 </util:set> <util:map id="scoreBean"> </util:map> <util:properties id="dbBean"> John 1234 </util:properties> 8)读取properties文件的内容 <util:properties id="config" location="classpath:config.properties"/> 9)spring表达式 a.spring表达式的作用?

可以用来读取其它bean的属性 b.用法如下图: