宏哥、为你疯之Spring第一章学习笔记

Spring第一章学习笔记

一.Spring框架的作用:
   Spring可以解决业务逻辑层和其他各层的耦合问题,也是一个框架的粘合剂,它让面向接口编程思想贯穿了整个系统,特点:高内聚,低耦合,设计层框架!
二.常见模块:
   20多个子模块,模块按组7大块,核心容器、数据访问/集成,Web,AOP(面向切面编程)、设备、消息和测试
三.IOC是什么?
   控制反转,调用者的实例创建不再由调用者自己创建,而是由spring容器创建,这个过程把实例创建的控制权由应用代码转移到了外部容器,控制权发生了改变。
四.DI是什么?
   依赖注入,给对象赋属性值,一定要保留空的构造方法和get/set的方法!
五.Bean标签里四个属性的作用:
   1.Name属性:给对象取名,名字可以同时取多个,但是不同的对象不能重复

   2.Scope对象作用域属性:

   1)scope = “singleton” 默认值,Spring容器默认创建的对象是单例!
   2)scope=“prototype” 创建的对象是多例(每次使用对象的时候额外创建一个新的
   3)scope=“session” 表示在一次会话范围内,Spring容器中的对象保持一个,公用同一个!
   4)scope=“request” 表示在一次请求范围内,Spring容器中的对象保持一个,公用同一个
注意:后两个只能用在web项目里

   3.对象懒创建(只有在scope = "singleton"才会生效)
lazy-init表示对象的加载时机(true:懒加载(使用对象的时候才创建);false(spring框架一启动就加载))

   4.对象创建完成后调用的方法,和对象销毁后调用的方法
init-method=“对象创建完成后调用的方法”
destroy-method=“对象销毁后调用的方法”
六.spring创建对象的四种方式:
(1)用无参构造方法创建

 <!--方式一:通过无参构造创建-->
        <bean id="p1" class="com.swjd.bean.Person" name="person1,person2" scope="singleton" lazy-init="false" init-method="init"
              destroy-method="destroy">
                <!--依赖注入DI也是调用set方法注入的-->
                <property name="id" value="1"></property>
                <property name="name" value="陈钰琪"></property>
                <property name="sex" value="女"></property>
        </bean>

(2)用带参的构造方法创建对象

<!--方式二:通过有参构造创建对象-->
        <bean id="p3" class="com.swjd.bean.Person">
                <constructor-arg index="0" type="int" value="3"></constructor-arg>
                <constructor-arg index="1" type="java.lang.String" value="古力娜扎"></constructor-arg>
                <constructor-arg index="2" type="java.lang.String" value="女"></constructor-arg>

        </bean>

(3)用静态工厂创建对象

<!--方式三:通过静态工厂创建对象-->
        <bean id="p4" class="com.swjd.factory.PersonFactory" factory-method="createPerson"></bean>

(4)用非静态工厂创建对象

<bean id="factory" class="com.swjd.factory.NoStaticPersonFactory"></bean>
        <bean id="p5" factory-bean="factory" factory-method="createPerson"></bean>

七.Spring依赖注入的4种方式:
     1.调用set方法注入

   <bean id="p1" class="com.swjd.bean.Person" name="person1,person2" scope="singleton" lazy-init="false" init-method="init"
              destroy-method="destroy">
                <!--依赖注入DI也是调用set方法注入的-->
                <property name="id" value="1"></property>
                <property name="name" value="陈钰琪"></property>
                <property name="sex" value="女"></property>
        </bean>

     2.调用带参的构造方法注入

<bean id="p3" class="com.swjd.bean.Person">
                <constructor-arg index="0" type="int" value="3"></constructor-arg>
                <constructor-arg index="1" type="java.lang.String" value="古力娜扎"></constructor-arg>
                <constructor-arg index="2" type="java.lang.String" value="女"></constructor-arg>

        </bean>

     3.P命名空间注入(本质依旧是set注入,语法简洁一些)

 <!--方式三:通过P命令注入-->
    <bean id="m3" class="com.swjd.bean.Man" p:id="3" p:name="王祖蓝" p:hobby="rapper" p:dog-ref="dog1"/>

     4.Spel表达式注入

<!--方式四:通过SPEL注入-->
    <bean id="m4" class="com.swjd.bean.Man">
        <property name="id" value="#{m1.id}"></property>
        <property name="name" value="#{m1.name}"></property>
        <property name="hobby" value="#{m1.hobby}"></property>
    </bean>

八.复杂类型的注入:
     1.注入对象

  <!--注入对象-->
        <!--
        <property name="dog" ref="dog1"></property>
        -->
        <property name="dog">
            <ref bean="dog1"/>
        </property>

     2.注入数组

<!--注入数组-->
           <property name="hobbys">
               <array>
                   <value>学习</value>
                   <value>打豆豆</value>
               </array>
           </property>

     3.注入集合

<!--注入集合-->
            <property name="subjects">
                <list>
                    <value>Spring</value>
                    <value>Mybatis</value>
                    <value>十宗罪</value>
                </list>
            </property>
            <!--注入set集合-->
            <property name="girlfriends">
                <set>
                    <value>李嘉欣</value>
                    <value>刘嘉玲</value>
                    <value>周慧敏</value>
                </set>
            </property>

     4.注入map

<!--注入map集合-->
            <property name="map">
                <map>
                    <entry key="CN" value="中国"></entry>
                    <entry key="RU" value="俄罗斯"></entry>
                    <entry key="US" value="美国"></entry>
                </map>
            </property>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值