首页 > 技术文章 > Spring入门——day2

TRUENO-86 2022-03-04 10:55 原文

一 . 依赖注入(DI : Dependency Injection)

  定义:

    依赖:Bean 对象的创建依赖于容器

    注入:Bean 对象的资源 均有容器来设置和装配

 

二 . 注入方式:

  1 . 构造器注入(见上节)

  2 . Set 注入:

    

<bean id="address" class="com.ma.pojo.Address">
    <property name="address" value="重庆"/>
</bean>

<bean id="student" class="com.ma.pojo.Student">
    <!--第 1种:普通值注入,value-->
    <property name="name" value="炖红鱼"/>

    <!--第 2种:Bean 注入,ref-->
    <property name="address" ref="address"/>

    <!--第 3种:数组注入,ref-->
    <property name="books">
        <array>
            <value>红楼梦</value>
            <value>西游记</value>
            <value>水浒传</value>
        </array>
    </property>

    <!--第 4种:List-->
    <property name="hobbies">
        <list>
            <value>看电影</value>
            <value>玩游戏</value>
        </list>
    </property>

    <!--第 5种:Map,
                不用 value,用 entry(注入键值对) -->
    <property name="card">
        <map>
            <entry key="身份证" value="123456"/>
            <entry key="银行卡" value="654321"/>
        </map>
    </property>

    <!--第 6种:Set-->
    <property name="games">
        <set>
            <value>LOL</value>
            <value>CSGO</value>
        </set>
    </property>

    <!--第 7种:空值注入-->
    <!--<property name="wife" value=""/>-->

    <!--第 8种:NUll 值注入-->
    <property name="wife">
        <null/>
    </property>

    <!--第 9种:Properties(配置类)
                写法类似于 键值对,但是值写在两个尖括号中间-->
    <property name="info">
        <props>
            <prop key="driver">201806134102</prop>
            <prop key="url"></prop>
            <prop key="username">root</prop>
            <prop key="password">123456</prop>
        </props>
    </property>
</bean>

 

 

  3 . P命名空间:本质上是 Set 注入

    

   <!--P(property)命名空间注入,可以直接注入属性的值-->
    <bean id="user" class="com.ma.pojo.User" p:name="炖红鱼" p:age="18"/>

 

  4 . C命名空间:本质上是 构造器注入

    

    <!--C(constructor)命名空间注入,-->
    <bean id="user2" class="com.ma.pojo.User" c:age="18" c:name="炖红鱼"/>

 

  PS:使用前需要导入xml约束

  

  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:c="http://www.springframework.org/schema/c"

 

三 .  Bean的 Scope(作用域)

  

 

 

   1 . singleton (默认):单例模式,无论用几次 getBean 拿对象,始终用的都是同一个Spring创建好的 实例

        

 

 

 

  2 . prototype:原型模式,每次用 getBean 获取的对象 都是新产生的

        

 

 

   其余的类型只能在 web 开发中使用

 

 

四 . Bean 的自动装配(autowire)

  1. 自动装配是 Spring 满足 Bean 依赖的一种方式

    spring中的3种配置方式:

      1 . 在 XML 中 显式配置

      2 . 在 Java 中 显式配置

      3 . 隐式 的自动装配 (重点)

 

  2 . byName 自动装配

    

 

 

 

  3 . byType:

    

 

 

 

  4 . 使用注解实现自动装配

      导入约束:

          

<?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:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

</beans>

      配置注解的支持:

<context:annotation-config/>

      在实现类的属性前加上:@Autowired(根据byType来进行自动装配的,如果需要byName的话,加上@Qualifier)

      连下面的 set 方法都不需要,只需要 get方法,直接就能够 注入对象(前提是自动装配的属性在IOC(spring)容器中存在,且符合名字 byName)     

           

 

 

 

             

 

 

 

       结果:

         

 

 

 

  5 . @Nullable:若有字段标记了这个注解,说明这个字段可以为 null

  6 . @Resource:Java 自己的注解,默认通过 byName实现,如果找不到名字,则通过 byType 实现

    @Autowired:Spring 的注解,    默认通过 byType实现,如果找不到,可以通过追加 @Qualifier注解按照 byName ,指定一个唯一的对象实现

     

 

五 . Java 复习(集合的分类)

  1 . Java 集合不同于数组,可以存放类型和操作数不固定的数据,且只能存放 引用类型 的数据,不能存放 基本数据类型

    1 . Set (集,属于 collection)

      最简单的一种集合,没有特定方式排序,且没有重复对象,set 接口主要实现两个实现类:

        · HashSet():按照哈希算法存取集合中的对象,存取速度较快

        · TreeSet():实现 SortedSet 接口,能够对集合中的对象进行排序

        set 中存放的是对象的引用,没有重复的

    2 . List (列表,属于 collection)

      特点:元素以线性方式存储,可以存放重复的对象,实现类包括:

        · ArrayList():长度可以改变的数组,可对元素进行随机访问,插入和删除速度慢

        · LinkedList(): 采用链表的数据结构,插入和删除速度快,访问慢

    3 . Map(映射)

      一种把 键 和 值 对象映射的集合,每个元素都包含了一对键和值对象,检索元素时,给出键就会返回值

        ·get():获取 键 key 相对应的 值,map中键不允许重复

      特点:执行效率慢,所以有了HashMap

    4 . HashMap:使用了特殊值(散列码:hashcode),来取代对键的缓慢搜索

             hashcode:是“相对唯一”的,用于代表对象的 int类型的值,它是通过该对象的某些信息转换生成的

                 所有Java对象都能产生hashcode

             HashMap就是使用对象的 hashcode 进行快速查询的,显著提高了性能

  2 . Collection 和 Map的区别:

    容器内每个位置存储元素个数不同

    Collection 每个位置只有 1个元素

    Map 有 Key + Value

  3 . 特征:

    List、Set、Map 的对象 都是 Object 型

 

 

         

  


推荐阅读