`
tianhei
  • 浏览: 211650 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring根据类型自动装配

阅读更多

Bean1.java

package com.cos.bean110321;
public class Bean1 {
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

 

Bean2.java

package com.cos.bean110321;
public class Bean2 {
    int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

 

applicationContext_7.xml

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

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:amq="http://activemq.apache.org/schema/core" xmlns:jms="http://www.springframework.org/schema/jms"
	xmlns:context="http://www.springframework.org/schema/context"
	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
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd" default-autowire="byType">

    <bean name="test" class="com.cos.bean110321.Test"/>
    <bean class="com.cos.bean110321.Bean1"/>
    <bean name="asdf" class="com.cos.bean110321.Bean2"/>
</beans>

 

Test.java

package com.cos.bean110321;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
    private Bean1 bean1;
    private Bean2 bean2;
    public Bean1 getBean1() {
        return bean1;
    }
    public void setBean1(Bean1 bean1) {
        this.bean1 = bean1;
    }
    public Bean2 getBean2() {
        return bean2;
    }
    public void setBean2(Bean2 bean2) {
        this.bean2 = bean2;
    }
    public static void main(String[] args) {
        //根据配置文件获得bean工厂
        BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext_7.xml");
        //取得test这个bean,转化成Test对象
        Test test = (Test) factory.getBean("test");
        //给Bean1的name设置值:good
        test.getBean1().setName("good");
        //取得Bean1的name属性的值,结果输出:good
        System.out.println(""+test.getBean1().getName());

        //给Bean2的age设置值:20
        test.getBean2().setAge(20);
        //取得Bean2的age属性的值,结果输出:20
        System.out.println(""+test.getBean2().getAge());
    }
}

    

从输出中可以看到,在Test.java中正确的给Bean1和Bean2设置了name和age值。

但是在spring配置文件中,既没有指定注入关系,也没有指定按名称自动装配。

但是在配置文件中可以看到标签<beans>的一个属性:default-autowire="byType"

这就是按类型自动匹配,此时只要Test.java中的属性的名字在配置文件中有完成的路径(class选项)即可,不需要在配置文件中配置注入关系,也不需要指定被注入类的id、name,也可以把id、name都去掉,只留一个class属性。

spring就会自动根据类型匹配到。

 

spring的<bean>标签里的id和name的区别:

1、id是唯一标识,并且需遵循XML的命名规范。name可以有重复,并且不需要遵循

2、name值可以有多个,这样以","分隔:name="name1,name2"

     此时通过getBean("name1")和getBean("name2");返回相同的实例(Singleton的时候)

 

 

0
1
分享到:
评论

相关推荐

    Spring实现自动装配

    然而,自动装配简化了这个过程,Spring容器会尝试根据类型或名称自动找到合适的依赖并注入到bean中。 在Spring 4中,自动装配主要有以下几种方式: 1. **无注解自动装配(No Annotation Auto-Wiring)**:在XML...

    spring自动装配例子

    (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 &lt;bean class="xxx" &gt;&lt;/bean&gt; (4)constructor:与 byType 方式类似,不同之处是构造注入 &lt;bean class="xxx" &gt;&lt;/bean&gt; 本例,演示 byName...

    Spring自动装配解析

    - byType:根据属性的类型自动装配。Spring会查找与该属性类型匹配的bean,并将其注入。 - constructor:通过构造函数进行装配,找到与构造函数参数类型匹配的bean。 - autodetect:Spring会尝试通过byType和...

    Spring中的自动装配有哪些限制?.docx

    自动装配基于类型匹配,如果有多个相同类型的bean,Spring无法确定应该注入哪一个。此时,你可能需要使用@Qualifier注解来指定确切的bean,或者调整bean的定义以避免类型冲突。 5. **精确控制的缺失**: 自动装配...

    Spring由类型(Type)自动装配源码

    本文将深入解析Spring如何实现类型自动装配的源码。 首先,让我们理解类型自动装配的基本概念。当Spring容器在初始化bean时,如果发现某个bean的属性需要一个特定类型的依赖,而没有明确指定bean的id或名称,那么...

    spring自动装配

    标题中的“Spring自动装配”指的是Spring框架中的一个重要特性,它允许开发者在不显式配置Bean依赖的情况下,由Spring容器自动管理Bean之间的依赖关系。这一特性极大地简化了代码,提高了可维护性和可测试性。 在...

    4Spring自动装配——annotation resource方式

    如果找不到匹配的名称,但找到了类型匹配的Bean,Spring会默认使用类型匹配进行自动装配。 ### 三、`@Qualifier`辅助注解 当一个类型有多个实例时,`@Autowired`可能会出现歧义,这时可以结合`@Qualifier`注解来...

    spring中的自动装配实例byName、byType

    byType自动装配则是根据bean的类型来匹配依赖。同样以`MyService`为例,如果它有一个`DataSource`类型的`dataSource`属性,而容器中有多个`DataSource`实现,Spring会报错,因为无法确定应该注入哪个`DataSource`。...

    spring学习之四“自动装配”

    通过自动装配,Spring容器能够根据bean的类型或者名称自动查找并注入相应的依赖,从而减少XML配置文件的繁琐工作。 一、自动装配类型 1. **byName**:基于bean的名称进行自动装配。当Spring容器在bean的属性上发现@...

    Java注解机制之Spring自动装配实现原理详解

    其中,byName是指根据Bean对象的名称来进行自动装配,byType是指根据Bean对象的类型来进行自动装配,constructor是指使用构造方法来进行自动装配,autodetect是指自动选择byType或constructor的自动装配方式,no是指...

    Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    本篇将重点讲解Spring的@Autowired自动装配机制,包括XML配置版和注解版,并深入到源码层面进行解析。 @Autowired是Spring框架中的一个核心注解,用于实现自动装配bean的需求。当我们想要在类中注入某个依赖时,...

    Spring 自动装配及其注解

    本文将深入探讨Spring自动装配的概念、类型以及常用的注解。 一、Spring自动装配的基本概念 自动装配是Spring IoC(控制反转)的一种实现方式,IoC意味着容器负责创建对象并管理它们的生命周期,包括对象之间的依赖...

    Spring的自动装配源代码

    在Spring框架中,自动装配(Auto-Wiring)是一种简化配置的方式,它允许Spring容器自动为Bean提供依赖。这种特性使得开发者无需显式地在XML配置文件中声明Bean之间的依赖关系,从而减少了配置工作量,提高了代码的可...

    第五章 Spring4 自动装配、方法注入

    Spring的自动装配是依赖注入的一种形式,它允许Spring容器根据配置信息自动为bean的属性赋值。Spring提供了多种自动装配模式,如byName、byType、constructor、autodetect等。byName是根据属性名匹配bean的id,...

    Spring自动装配模式表

    当设置自动装配模式为`constructor`时,Spring容器会根据Bean的构造器参数类型来查找容器中具有相同类型的其他Bean,并将其作为构造器参数注入到当前Bean中。这种方式适用于依赖项只能通过构造器初始化的情况。 **...

    Spring如何装配各种集合类型的属性

    例如,如果集合元素是`List&lt;Address&gt;`,且存在多个`Address`类型的bean,它们的名称分别与集合元素的类型匹配,如`homeAddress`、`workAddress`,那么这些bean会被自动装配到列表中。 6. **使用`@Qualifier`注解** ...

    Spring中集合类型的装配

    此外,Spring还提供了如`@Resource`注解、`@Value`注解等更多方式来完成集合类型的装配,使得我们可以根据具体需求选择最合适的方法。 总的来说,Spring中集合类型的装配是一个强大的特性,它增强了Spring容器的...

    Spring_集合(List_Map_Set)_自动装配

    集合自动装配是指Spring框架自动填充List、Map或Set类型的属性,根据配置文件中的bean定义,将相应的bean实例注入到这些集合中。这种方式减少了手动创建和管理对象的复杂性,提高了代码的可维护性和可测试性。 三、...

Global site tag (gtag.js) - Google Analytics