zoukankan      html  css  js  c++  java
  • [原]spring学习笔记7.自动装配

    在之前的xml配置中.我们都要注册好各类之间的依赖关系
    比如
     1<!-- other -->
     2  <!-- 配置bean3和bean4共用的部分抽取出来 -->
     3  <bean id="bean34" abstract="true"> <!--将这个类声明成抽象类 -->
     4     <property name="id" value="10"/>  <!-- 属性即是bean3和bean4两个类共有的元素.并赋值 -->
     5     <property name="name" value="tom"/>
     6  </bean>
     7  <!-- 配置bean3 和bean 4 -->
     8    <!-- 使用parent的值为上面注册的id:bean34. 相当于bean3继承bean34 -->
     9  <bean id="bean3" class="com.zyl.spring.Bean3" parent="bean34">
    10     <property name="password" value="1235"/>  <!-- 在bean3中只需配置公共部分没有的,自己独有的属性即可 -->
    11     <property name="name" value="这个在公共中有定义值.如果bean3中再定义.则以bean3覆盖原来的配置内容"></property>
    12  </bean>
    13  <bean id="bean4" class="com.zyl.spring.Bean4" parent="bean34"></bean>
    14  <!-- 以下配置bean3.4.5 -->
    15  <bean id="bean2" class="com.zyl.spring.Bean2">
    16      <property name="bean3" ref="bean3"/><!-- bean2用引用了bean3.4.5 -->
    17      <property name="bean4">
    18         <ref bean="bean4"/>  <!-- 这种写法和上面那种效果一样 -->
    19      </property>
    20      <property name="bean5" ref="bean5"/> <!-- name为bean2中定义的变量名,ref为配置文件的id名 -->
    21  </bean>  
    22  <bean id="bean5" class="com.zyl.spring.Bean5"> <!-- 接下来描述bean5的元素 -->
    23      <property name="age" value="10"/><!-- 设定值为10 -->
    24  </bean>
    这样一个配置中,我们注册了Bean3.4.5之后
    在Bean2中有依赖bean3.4.5所以在第16~20行需要注册之.然后通过ref指向bean id名
    这样做配置起来比较麻烦.  (但推荐这样做,因为可以很清楚的看到类之间依赖关系.而且日后的维护工作也很容易)
    接下来,我们看下如何简化这个配置.(用于快速开发的时候,效果不错)
    代码参考whyspringofautobyName
    之前的Bean2.3.4.5予以保留.
    保留test中的testInjection2()
    配置文件中删除Bean1的配置.
    然后开始吧:

    华丽的分割线=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    配置文件的beans 修改成

    1<?xml version="1.0" encoding="UTF-8"?>
    2<beans
    3    xmlns="http://www.springframework.org/schema/beans"
    4    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" 
    6default-autowire="byName">
    添加一下第6行的代码即可.
    将之前的bean2的配置修改
    之前的配置让我们回忆一下:

    1  <bean id="bean2" class="com.zyl.spring.Bean2">
    2      <property name="bean3" ref="bean3"/><!-- bean2用引用了bean3.4.5 -->
    3      <property name="bean4">
    4         <ref bean="bean4"/>  <!-- 这种写法和上面那种效果一样 -->
    5      </property>
    6      <property name="bean5" ref="bean5"/> <!-- name为bean2中定义的变量名,ref为配置文件的id名 -->
    7  </bean>  
    将其修改成
     <bean id="bean2" class="com.zyl.spring.Bean2">即可

    运行test  会发现效果满足.
    现在解释一下: 配置文件会在bean2中找到依赖的元素:
    如:
    1    private Bean3 bean3;
    2    private Bean4 bean4;
    3    private Bean5 bean5;
    根据他们的变量名bean3 bean4 bean5 (其实更正确的理解应该是setBean3.4.5 的小写bean3.4.5 .不过没关系.前面的说法更好理解)
    根据那个变量名到配置文件中寻找bean id 相同的注册之.(这就要求你的bean id 名不能乱取了. 所以采用根据名称自动注册.需要注意bean id和属性名的一致.)
    如果我们修改bean id 则,spring会找不到.

    接下来,看看我们把beans中的配置修改为default-autowire="byType"
    其他的不变.
    运行效果同样满足
    名探侦柯南答疑:
      spring会根据bean2中的
    1    private Bean3 bean3;
    2    private Bean4 bean4;
    3    private Bean5 bean5;
    里边的元素bean2.3.4的类型即是 Bean2.3.4类寻找
    配置文件中注册的元素的类型 即 bean中的class="**.**.Bean2/3/4"通过这样来注入.
    这样做的好处,在于bean id名可以随便取.

    奇淫巧技耳,不过我们可以看到spring做的很好很强大.人家是一心一意的为您服务.
    这篇就到这里吧. 对spring有个更多点的了解.这孩子还是蛮可爱的.
  • 相关阅读:
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    常见的http response
    ==容易错误的例子
    点击panel滚动条滚动到底部
    fabric实现文本聚焦、可编辑
    JSON.parse()和JSON.stringify()的使用
    centos7安装mysql
    阿里云第一次访问tomcat非常慢的解决办法
    java中的语法糖
    jvm | 基于栈的解释器执行过程
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/3562431.html
Copyright © 2011-2022 走看看