Spring

简介:
  • 开源的、用来简化企业级应用开发的、应用开发框架。
特点
  • 1)简化开发
    spring对常用的api(比如jdbc)做了封装,比如,使用spring
    jdbc访问数据库,就不用再考虑如何获取连接与关闭连接了。
  • 2)解耦
    spring帮我们管理对象之间的依赖关系,这样代码的维护性会大
    大提高。
  • 3)集成其它框架
    spring可以将其它的一些框架集成进来。
    比如,可以将定时任务处理框架(Quartz)集成进来。
Spring容器
  • Spring框架的核心模块,用来管理对象(包括对象的创建、销毁等等)
  • 如何启动Spring容器?

step1. 导包。
step2. 添加Spring配置文件。
step3. 启动容器。

如何创建对象?
1)方式一  无参构造器(或者缺省构造器)
step1. 为类添加无参构造器。
step2. 在配置文件当中,添加相关配置(bean元素)。      
step3. 启动容器,调用容器的getBean方法。
2)方式二 静态工厂方法 (了解)
3)方式三 实例工厂方法 (了解)
<!-- 利用无参构造器创建对象 -->
    <bean id = "p1" class = "test.Person" scope = "prototype"/>
<!-- 静态工厂方法创建对象 -->
    <bean id = "cal" class = "java.util.Calendar" factory-method = "getInstance"/>

<!-- 
        factory-bean:值是一个bean的id。
        factory-method:指定一个实例方法。
        注:
            容器会调用c1这个bean的getTime方法
            来创建对象。
     -->
    <bean id = "date" factory-bean="cal" factory-method="getTime"/>

<bean id = "poo" class="test.Poo" init-method="init" destroy-method = "destroy"/>
作用域

1)默认情况下,容器对于某个bean元素,只会创建一个实例。
2)如何设置scope=”prototype”,则会创建多个。
注:默认值为”singleton”。

生命周期 (对资源进行管理)
1)初始化方法 
    使用init-method指定初始化方法。
2)销毁方法
    使用destroy-method指定销毁方法。
    注:
        a.容器关闭之前,会调用销毁方法。
        b.只有当作用域为singleton时,销毁
        方法才会执行。
延迟加载 (了解)
1)默认情况下,容器启动之后,会将所有作用域为singleton的
bean先创建好。
2)所谓延迟加载,指的是容器启动之后,不再创建这些对象(即使作用域为
singleton)。 

IOC和DI

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

DI是什么 (Dependency Injection 依赖注入)?

容器调用set方法或者构造器来建立依赖关系。
注:
IOC是目标,DI是手段

这里写图片描述

这里写图片描述

构造器注入
step1 添加相应的构造器。
step2. 使用constructor-arg元素来配置构造器注入。

这里写图片描述

自动装配(了解)
容器依据某些规则,自动建立对象之间的依赖关系。默认情况下,容器不会自动装配。
    <bean id="cp1" class="auto.Computer"/>
    <!-- 
        autowire:表示自动装配(即容器依据某些
        规则,自动建立对象之间的依赖关系)。
        byName: 容器依据属性名查找对应的bean
        (即以属性名作为bean的id),找到之后,调用
        set方法来注入。
            注:如果找不到对应的bean,不会注入。
        byType: 容器依据属性类型查找对应的bean
        (即bean的类型与属性类型一致),找到之后,
        调用set方法来注入。
            注:如果找不到对应的bean,不会注入。
            如果找到多个,会出错。
        constructor:类似于byType,只不过调用的是
            构造器来注入。
     -->
    <bean id="mg" class="auto.Manager" 
    autowire="byType"/>

这里写图片描述

(6)注入基本类型的值
使用value属性来注入。
    <!-- 使用spring表达式读取其它bean的属性值 -->
    <bean id="t1" class="value.Teacher">
        <property name="name" 
        value="#{stu1.name}"/>
        <property name="interest"
        value="#{stu1.interest[0]}"/>
        <property name="score"
        value="#{stu1.score['英语']}"/>
        <property name="pageSize"
        value="#{config['pageSize']}"/>
    </bean>

    <!-- 注入基本类型的值 -->
    <bean id="stu1" class="value.Student">
        <property name="name" value="小花"/>
        <property name="age" value="22"/>
        <!-- 注入集合类型的值 -->
        <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="英语" value="80"/>
                <entry key="math" value="60"/>
            </map>
        </property>
        <property name="db">
            <props>
                <prop key="username">Sally</prop>
                <prop key="password">1234</prop>
            </props>
        </property>
    </bean>
    <!-- 将集合类型的值配置成一个bean -->
    <util:list id="interestBean">
        <value>钓鱼</value>
        <value>做菜</value>
        <value>看电视</value>
    </util:list>
    <util:set id="cityBean">
        <value>长沙</value>
        <value>岳阳</value>
        <value>华容</value>
    </util:set>
    <util:map id="scoreBean">
        <entry key="english" value="70"/>
        <entry key="math" value="90"/>
    </util:map>
    <util:properties id="dbBean">
        <prop key="username">Tom</prop>
        <prop key="password">1234</prop>
    </util:properties>
    <!-- 以引用的方式注入集合类型的值 -->
    <bean id="stu2" class="value.Student">
        <property name="interest"
         ref="interestBean"/>
        <property name="city"
        ref="cityBean"/>
        <property name="score"
        ref="scoreBean"/>
        <property name="db"
        ref="dbBean"/>
    </bean>

    <!-- 读取属性文件(.properties)的内容 -->
    <!-- 
        location:指定要读取的属性文件的位置及
        文件名。
        注: 
            classpath:表示依据类路径去查找。
        容器依据路径读取属性文件的内容,并且
        将这些内容存放到Properties对象上。
     -->
    <util:properties id="config" 
    location="classpath:config.properties"/>

    <util:properties id="db" 
    location="classpath:db.properties"/>

    <!-- 配置连接池 -->
    <bean id="ds" 
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
        <property name="driverClassName"
        value="#{db.driver}"/>
        <property name="url"
        value="#{db.url}"/>
        <property name="username"
        value="#{db.user}"/>
        <property name="password"
        value="#{db.pwd}"/>
        <property name="initialSize"
        value="#{db.initsize}"/>
    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值