Spring

作者: 其实我很菜啊 | 来源:发表于2017-07-21 15:18 被阅读0次

    在spring框架中有两个重要的特征即:控制反转(IOC)和面向切面(AOP)

    什么是IOC

    IOC:即控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护
    DI(依赖注入)是其一种实现方式 目的:创建对象并且组装对象之间的关系 ioc容器会帮助我们自动创建对象
    IOC作用:找IOC容器-容器返回对象-使用容器
    DI-IOC的另一表达,即组件以一些预先定义好的方式接受来自如容器的资源注入
    在spring容器中默认仅存在一个Bean实例,Bean以单实例的方式存在,即无论实例化多少个bean对象它们的引用都是相等的

    什么是DI

    DI即依赖于某种方法给Bean的属性赋值,DI有三种赋值方式

    1. 属性注入 构造器set方法注入 通过xml文件中<property name="属性名" value="属性值"></property>或p属性注入
    2. 构造器注入 <constructor-arg value="属性值" index="构造器中下标位置(可省)"></constructor-arg>//构造器注入资源时按顺序进行
    3. 工厂注入

    配置Spring配置文件

    1. 通过<property>标签注入
    <bean id="person1" class="summer.spring.bean.Person">
        <property name="name" value="zhangsan"></property>
        <property name="age"  value="12"></property>    
    </bean>
    

    name属性的值对应javaBean中定义的属性,value即为要给属性赋的值

    1. <constructor-arg index>顺序注入
     <bean id="car1" class="summer.spring.bean.Car" >
        <constructor-arg value="奔驰" index="0"></constructor-arg>
        <constructor-arg value="德国" index="1"></constructor-arg>
        <constructor-arg value="3000000.0" index="2"></constructor-arg>
    </bean>
    

    index索引对应javaBean中第几个属性,从0开始

    1. 从外部属性文件中注入

    配置properties文件,与Bean的属性相对应

    personName=\u674E\u56DB\u5F20\u4E09
    personAge=55

    配置Spring文件

    <context:property-placeholder location="classpath:Person.properties"/>通过context:property-placeholder标签引入
    
            <bean id="person1" class="spring2.bean.Person" >
                <property name="name" value="${personName}"></property>
                <property name="age"  value="${personAge}"></property>
            </bean>
    

    ${}是SPEL表达式,其中的值与properties文件定义的属性值匹配。

    bean的引用

    当一个对象内中包含另一个对象时在配置文件中可以通过<ref>元素或ref属性为 Bean 的属性或构造器参数指定对Bean的引用(id),也可以在属性或构造器里包含Bean的声明,这样的Bean称为内部Bean

    <bean id="car1" class="summer.spring.bean.Car">
    <constructor-arg value="奔驰" index="0"></constructor-arg>
    <constructor-arg value="德国" index="1"></constructor-arg>
    <constructor-arg value="3000000.0" index="2"></constructor-arg>
    </bean>
    <bean id="person1" class="summer.spring.bean.Person">
        <property name="name" value="zhangsan"></property>
        <property name="age"  value="12"></property>
        <property name="car" ref="car1"></property>
    </bean>
    

    id值在整个spring配置文件中是唯一的!!!

    引用集合

    一个对象中包含另一个对象的集合时可以通过List、Map标签配置

    <bean id="person1" class="summer.spring.bean.Person">
        <property name="name" value="zhangsan"></property>
        <property name="age"  value="12"></property>
        <property name="cars" >
            <list>
                <bean  class="summer.spring.bean.Car">
                    <constructor-arg value="奔驰" index="0"></constructor-arg>
                    <constructor-arg value="德国" index="1"></constructor-arg>
                    <constructor-arg value="3000000.0" index="2"></constructor-arg>
                </bean>
                <bean  class="summer.spring.bean.Car">
                    <constructor-arg value="BMW" index="0"></constructor-arg>
                    <constructor-arg value="德国" index="1"></constructor-arg>
                    <constructor-arg value="2990000.0" index="2"></constructor-arg>
                </bean>
            </list>
        </property>
    </bean>
    

    Spring的继承

        <bean id="car1" class="spring2.bean.Car" >
            <property name="type" value="BMW"></property>    
        </bean>
        <bean id="person1" class="spring2.bean.Person" autowire="byType">
            <property name="name" value="小明"></property>
            <property name="car" ref="car1"></property>
        </bean>
        <bean id="person2" parent="person1"></bean>
    

    person2继承了person1的所有属性,当自身属性于父类不一样时可以重新在<property>标签中定义自己的属性值,将会覆盖父类原有的属性值。注意abstract和autowire的属性不会被子Bean继承

    抽象Bean

    <bean id="abstractPerson" abstract="true" >
            <property name="name" value="tom"></property>
            <property name="car" ref="car1"></property>
    </bean>
    

    抽象Bean并不是一个只是存在的Bean,而是一个具有相同一类属性的Bean的一个模板,class属性可以去掉,于java中抽象类非常类似

    相关jar包

    https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring-beans/4.0.0.RELEASE/spring-beans-4.0.0.RELEASE.jar

    相关文章

      网友评论

          本文标题:Spring

          本文链接:https://www.haomeiwen.com/subject/wmoskxtx.html