第3章 最小化Spring XML配置

目录:

  1. 自动装配Bean属性
  2. 使用注解装配
  3. 自动检测Bean
  4. 使用Spring基于Java的配置

自动装配Bean属性

四种类型的自动装配:

  1 byName 通过id的名字与属性的名字进行判断,要保证Bean实例中属性名字与该装配的id名字相同。

  2 byType 通过类型确定装配的bean,但是当存在多个类型符合的bean时,会报错。

  3 contructor 在构造注入时,使用该装配方式,效果如同byType。

  4 autodetect 首先尝试使用constructor进行自动装配。如果失败,再次尝试使用byType经行自动装配。(测试过,3.0.5版本不可用了,不知道是不是被移除了。)

自动装配以-byType为例讲解:

在byType装配方式下,spring首先会反射autowire="byType"的bean,得到bean属性的返回类型,然后去spring容器中按照类

型去匹配,最后把匹配到的bean注入到当前bean中.看个例子就明白了:

1.新建包com.tutorialspoint.autowire.bytype,并在包中新建Zoo.java类,内容如下:

package com.tutorialspoint.autowire.bytype;

import com.tutorialspoint.autowire.Cat;
import com.tutorialspoint.autowire.Dog;
import com.tutorialspoint.autowire.Duck;

public class Zoo {

    private Cat cat;
    private Dog dog;
    private Duck duck;
    // 自动装配并不适用于原始类型.这时候我们可以对该属性进行手动装配
    private String zooName;

    public void setZooName(String zooName) {
        this.zooName = zooName;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public void setDuck(Duck duck) {
        this.duck = duck;
    }

    public void print() {

        if (cat == null) {
            System.out.println("cat is null");
        } else {
            cat.sayHi();
        }

        if (dog == null) {
            System.out.println("dog is null");
        } else {
            dog.sayHi();
        }

        if (duck == null) {
            System.out.println("duck is null");
        } else {
            duck.sayHi();
        }

        System.out.println(zooName);
    }

}

2.在src目录下新建配置文件autowire_byType.xml。内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <!-- 名为zoo的bean在按照byType进行装配的时候,可以适配名字为cat1、dog1、duck1
        的bean的类型。所以最终cat1、dog1、duck1会被分别注入进zoo的cat、dog、duck属性。
        在按照类型进行装配的时候,如过有两个bean的类型符合的话,spring就不知道最终该使用哪个,这时候我们
        可以使用primary="true"告诉spring优先使用本bean
   -->
   <bean id="cat1" class="com.tutorialspoint.autowire.Cat" primary="true"></bean>
   <bean id="cat2" class="com.tutorialspoint.autowire.Cat"></bean>
   <bean id="dog1" class="com.tutorialspoint.autowire.Dog"></bean>
   <bean id="duck1" class="com.tutorialspoint.autowire.Duck"></bean>

   <bean id="zoo" class="com.tutorialspoint.autowire.bytype.Zoo" autowire="byType">
       <!-- 由于自动装配仅适用于引用类型,普通类型还需要手动进行注入 -->
       <property name="zooName" value="international_zoo"></property>
   </bean>

</beans>

注:

  1. 为自动装配标识一个首选Bean,可以使用<bean>元素的primary属性。如果只有一个自动装配的候选Bean的primary属性设置为true,那么该Bean将比其他候选Bean优先被选择。但是primary属性有一个很怪异的一点,它的默认设置为true。这意味着所有的候选Bean都变成首选Bean(因此,其实就不存在首选Bean了)。所有,为了使用primary属性,我们不得不将所有非首选Bean的primary属性设置为false。
  2. primary属性仅对标识首选Bean有意义。如果在自动装配时。我们希望排除某些Bean,那可以设置这些Bean的autowire-candidate属性为false,示例如下:
<bean id="saxophone" class="com.springinaction.springidol.Saxophone" autowire-candidate="false"/>

默认自动装配

如果需要为Spring应用的上下文中的每一个Bean(或者其中的大多数)配置相同的autowire属性,那么可以通过在根元素<beans>上增加一个default-autowire属性:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
    default-autowire="byType">
</beans>

注意

  1. default-autowire应用于指定Spring配置文件中的所有Bean;并不是应用于Spring应用上下文中的所有Bean。我们可以在一个应用上下文中定义多个配置文件,每个配置文件都可以有自己的默认自动装配策略。
  2. 同样,不能因为我们配置了一个默认的自动装配策略,就意味着所有的Bean都只能使用这个默认的自动装配策略。我们还可以使用<bean>元素的autowire属性来覆盖所配置的默认自动装配策略。
  3. 可以使用自动装配策略和显式装配策略,显式装配会覆盖自动装配。
时间: 2024-10-11 18:08:07

第3章 最小化Spring XML配置的相关文章

&lt;Spring实战&gt;3:最小化Spring XML配置

1 自动装配 Bean 属性 1.1 4 种类型的自动装配 byName:把与 Bean 的属性具有相同名字或 ID 的其他 Bean 自动装配到 Bean 的对应属性中 byType:把与 Bean 的属性具有相同类型的其他 Bean 自动装配到 Bean 的对应属性中 constructor:把与 Bean 的构造器入参具有相同类型的其他 Bean 自动装配到 Bean 构造器的对应入参中 autodetect:首先尝试使用 constructor 进行自动装配,如果失败再尝试使用 byTy

[Spring]04_最小化Spring XML配置

4.1 自动装配 Bean Spring 装配 bean 时,有时非常明确,就是需要将某个 bean 的引用装配给指定属性. 例如,若应用上下文中只有一个 javax.sql.DataSource 类型的 bean,那么任意一个依赖 DataSource 的其他 bean 就是需要这个 DataSource Bean. 为了应对这种明确的装配场景,Spring提供了自动装配(autowiring). 4.1.1 四种类型的自动装配 Spring提供了4种自动装配策略 (1)byName——把与

最小化Spring XML配置

自动装配 有以下几种方式: 1 byName 通过id的名字与属性的名字进行判断,要保证Bean实例中属性名字与该装配的id名字相同. 2 byType 通过类型确定装配的bean,但是当存在多个类型符合的bean时,会报错. 3 contructor 在构造注入时,使用该装配方式,效果如同byType. 4 autodetect 首先尝试使用constructor经行自动装配.如果失败,再次尝试使用byType经行自动装配.(这个测试了,3.0.5版本不可用了,不知道是不是被移除了.) 采用b

Spring实战3-最小化Spring XML配置

自动装配Bean属性 一共有四种自动装配类型(需要在Bean配置里添加autowire属性来指定用哪种类型) byName-把与Bean的属性具有相同名字或ID的其他Bean自动装配到Bean的对应属性中.如果没有跟属性的名字相匹配的Bean,则该属性不进行装配.--实际上对比的是Bean ID. byType-把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性.如果没有跟属性的类型相匹配的Bean,则该属性不被装配.局限性:如果Spring找到多个Bean,它们的类型都与

最小可用 Spring MVC 配置

[最小可用 Spring MVC 配置] 1.导入有概率用到的JAR包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/mave

spring xml配置

一个完整的spring xml配置:是把action,service,dao以及其它的资源性配置(如basedao)和公共性配置(如连接数据库)配置在resource.xml中,这样就有四个xml配置信息. 案例: 四个xml配置: applicationContext-action.xml: <?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframe

centos6.x最小化安装后配置网络

centos6.x最小化安装后配置网络 最小化安装CentOS6.x后,试着用yum安装几个软件,发现网卡都没配置! 解决办法: 编辑配置文件: vi /etc/sysconfig/network-script/ifcfg-eth0 修改下列几项配置: NM_CONTROLLED=no ONBOOT=yes BOOTPROTO=dhcp 修改完保存,然后: service network start 启动网卡,yum能用了!

Linux最小化安装网络配置

Linux最小化安装网络配置 配置网络ip vi /etc/sysconfig/network-scripts/ifcfg-ens33(将选中的部分改为yes) 保存退出并重启网络 service network restart 3.最小化安装没有ifconfig要用ip addr查看ip地址 ssh连接到MobaXterm 下载dokuwiki前安装必要工具 安装vimyum -y install vim 安装wgetyum -y install wget 安装net-tools(已安装过)

【Linux】CentOS6.X最小化安装后配置

1.centos6.5最小化安装后启动网卡2.ifconfig查询IP进行SSH链接3.更新系统源并且升级系统4.系统时间更新和设定定时任5.修改ip地址.网关.主机名.DNS6.关闭selinux,清空iptables7.创建普通用户并进行sudo授权管理8.修改SSH端口号和屏蔽root账号远程登陆9.锁定关键文件系统(禁止非授权用户获得权限)10.精简开机自启动服务11.调整系统文件描述符大小12.设置系统字符集13.清理登陆的时候显示的系统及内核版本14.内核参数优化15.定时清理/va