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的时候)
分享到:
相关推荐
然而,自动装配简化了这个过程,Spring容器会尝试根据类型或名称自动找到合适的依赖并注入到bean中。 在Spring 4中,自动装配主要有以下几种方式: 1. **无注解自动装配(No Annotation Auto-Wiring)**:在XML...
(3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 <bean class="xxx" ></bean> (4)constructor:与 byType 方式类似,不同之处是构造注入 <bean class="xxx" ></bean> 本例,演示 byName...
- byType:根据属性的类型自动装配。Spring会查找与该属性类型匹配的bean,并将其注入。 - constructor:通过构造函数进行装配,找到与构造函数参数类型匹配的bean。 - autodetect:Spring会尝试通过byType和...
自动装配基于类型匹配,如果有多个相同类型的bean,Spring无法确定应该注入哪一个。此时,你可能需要使用@Qualifier注解来指定确切的bean,或者调整bean的定义以避免类型冲突。 5. **精确控制的缺失**: 自动装配...
本文将深入解析Spring如何实现类型自动装配的源码。 首先,让我们理解类型自动装配的基本概念。当Spring容器在初始化bean时,如果发现某个bean的属性需要一个特定类型的依赖,而没有明确指定bean的id或名称,那么...
标题中的“Spring自动装配”指的是Spring框架中的一个重要特性,它允许开发者在不显式配置Bean依赖的情况下,由Spring容器自动管理Bean之间的依赖关系。这一特性极大地简化了代码,提高了可维护性和可测试性。 在...
如果找不到匹配的名称,但找到了类型匹配的Bean,Spring会默认使用类型匹配进行自动装配。 ### 三、`@Qualifier`辅助注解 当一个类型有多个实例时,`@Autowired`可能会出现歧义,这时可以结合`@Qualifier`注解来...
byType自动装配则是根据bean的类型来匹配依赖。同样以`MyService`为例,如果它有一个`DataSource`类型的`dataSource`属性,而容器中有多个`DataSource`实现,Spring会报错,因为无法确定应该注入哪个`DataSource`。...
通过自动装配,Spring容器能够根据bean的类型或者名称自动查找并注入相应的依赖,从而减少XML配置文件的繁琐工作。 一、自动装配类型 1. **byName**:基于bean的名称进行自动装配。当Spring容器在bean的属性上发现@...
其中,byName是指根据Bean对象的名称来进行自动装配,byType是指根据Bean对象的类型来进行自动装配,constructor是指使用构造方法来进行自动装配,autodetect是指自动选择byType或constructor的自动装配方式,no是指...
本篇将重点讲解Spring的@Autowired自动装配机制,包括XML配置版和注解版,并深入到源码层面进行解析。 @Autowired是Spring框架中的一个核心注解,用于实现自动装配bean的需求。当我们想要在类中注入某个依赖时,...
本文将深入探讨Spring自动装配的概念、类型以及常用的注解。 一、Spring自动装配的基本概念 自动装配是Spring IoC(控制反转)的一种实现方式,IoC意味着容器负责创建对象并管理它们的生命周期,包括对象之间的依赖...
在Spring框架中,自动装配(Auto-Wiring)是一种简化配置的方式,它允许Spring容器自动为Bean提供依赖。这种特性使得开发者无需显式地在XML配置文件中声明Bean之间的依赖关系,从而减少了配置工作量,提高了代码的可...
Spring的自动装配是依赖注入的一种形式,它允许Spring容器根据配置信息自动为bean的属性赋值。Spring提供了多种自动装配模式,如byName、byType、constructor、autodetect等。byName是根据属性名匹配bean的id,...
当设置自动装配模式为`constructor`时,Spring容器会根据Bean的构造器参数类型来查找容器中具有相同类型的其他Bean,并将其作为构造器参数注入到当前Bean中。这种方式适用于依赖项只能通过构造器初始化的情况。 **...
例如,如果集合元素是`List<Address>`,且存在多个`Address`类型的bean,它们的名称分别与集合元素的类型匹配,如`homeAddress`、`workAddress`,那么这些bean会被自动装配到列表中。 6. **使用`@Qualifier`注解** ...
此外,Spring还提供了如`@Resource`注解、`@Value`注解等更多方式来完成集合类型的装配,使得我们可以根据具体需求选择最合适的方法。 总的来说,Spring中集合类型的装配是一个强大的特性,它增强了Spring容器的...
集合自动装配是指Spring框架自动填充List、Map或Set类型的属性,根据配置文件中的bean定义,将相应的bean实例注入到这些集合中。这种方式减少了手动创建和管理对象的复杂性,提高了代码的可维护性和可测试性。 三、...