`

Spring之XML 配置里Bean的自动装配

 
阅读更多

 

Spring IOC 容器可以自动装配 Bean, 需要做的仅仅是在 <bean> 的 autowire 属性里指定自动装配的模式。

 

自动装配模式

 

1. byType(根据类型自动装配):若 IOC 容器中有多个与目标 Bean 类型一致的 Bean。 在这种情况下,Spring 将无法判定哪个 Bean 最合适该属性,所以不能执行自动装配。

2. byName(根据名称自动装配):必须将目标 Bean 的名称和属性名设置的完全相同。

3. constructor(通过构造器自动装配): 当 Bean 中存在多个构造器时。此种自动装配方式将会很复杂,不推荐使用。

 

自动装配的缺点

 

1. 在 Bean 配置文件里设置 autowire 属性进行自动装配将会装配 Bean 的所有属性。然而,若只希望装配个别属性时,autowire 属性就不够灵活了。

2. autowire 属性要么根据类型自动装配,要么根据名称自动装配,不能两者兼而有之。

一般情况下,在实际的项目中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力一些。

 

示例

 

1. 添加模型类

 

package xyz.huning.spring4.di.xml.beancfg.autowire;

public class Battery {

	private int id;
	
	private String type;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	@Override
	public String toString() {
		return "Battery [id=" + id + ", type=" + type + "]";
	}
	
}

 

package xyz.huning.spring4.di.xml.beancfg.autowire;

public class Screen {

    private int id;
	
	private int size;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}

	@Override
	public String toString() {
		return "Screen [id=" + id + ", size=" + size + "]";
	}

}

 

package xyz.huning.spring4.di.xml.beancfg.autowire;

public class Cellphone {

	private int id;
	
	private Battery battery;
	
	private Screen screen;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Battery getBattery() {
		return battery;
	}

	public void setBattery(Battery battery) {
		this.battery = battery;
	}

	public Screen getScreen() {
		return screen;
	}

	public void setScreen(Screen screen) {
		this.screen = screen;
	}

	@Override
	public String toString() {
		return "Cellphone [id=" + id + ", battery=" + battery + ", screen="
				+ screen + "]";
	}
	
}

 

2. 添加配置

 

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="battery" class="xyz.huning.spring4.di.xml.beancfg.autowire.Battery"
		  p:id="1" p:type="high"></bean>
	
	<bean id="screen1" class="xyz.huning.spring4.di.xml.beancfg.autowire.Screen"
		  p:id="1" p:size="9"></bean>
	
	<!--手动配置bean属性-->
	<bean id="cellphone1" class="xyz.huning.spring4.di.xml.beancfg.autowire.Cellphone"
		  p:id="1" p:battery-ref="battery" p:screen-ref="screen1"></bean>
	
	<!--使用byName方式自动装配bean属性-->
	<bean id="cellphone2" class="xyz.huning.spring4.di.xml.beancfg.autowire.Cellphone"
		  p:id="2" autowire="byName"></bean>
	
	<!--使用byType方式自动装配bean属性-->
	<bean id="cellphone3" class="xyz.huning.spring4.di.xml.beancfg.autowire.Cellphone"
		  p:id="3" autowire="byType"></bean>
	
</beans>

 

 

3. 添加测试类

 

package xyz.huning.spring4.di.xml.beancfg.autowire;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	public static void main(String[] args) {
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("autowire.xml");
		
		Cellphone cellphone1 = ctx.getBean("cellphone1", Cellphone.class);
		System.out.println(cellphone1);
		
		Cellphone cellphone2 = ctx.getBean("cellphone2", Cellphone.class);
		System.out.println(cellphone2);
		
		Cellphone cellphone3 = ctx.getBean("cellphone3", Cellphone.class);
		System.out.println(cellphone3);
		
		
		((ClassPathXmlApplicationContext)ctx).close();
	}
}

 

4. 执行结果

 

 

 

 

  • 大小: 25.8 KB
分享到:
评论

相关推荐

    Spring装配Bean教程之XML安装配置bean详解

    大家都知道spring有多重配置方式,基于XML,基于注解,基于java类的配置,其中基于XML是最强大的一种,下面这篇文章主要给大家介绍了关于Spring装配Bean之XML安装配置bean的相关资料,需要的朋友可以参考借鉴,下面...

    spring如何使用xml装配bean

    主要介绍了spring如何使用xml装配bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    spring入门学习-3、Bean装配(XML).pdf

    spring入门学习-3、Bean装配(XML).pdf

    Spring Boot技术知识点:Bean装配1

    Spring Boot技术知识点:Bean装配1

    尚硅谷佟刚Spring4代码及PPT.rar

    代码及ppt涵盖 Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的...

    Spring in action 实战中文版(第4版)目录修复版

    2.2 自动化装配bean 35 2.2.1 创建可被发现的bean 35 2.2.2 为组件扫描的bean命名 38 2.2.3 设置组件扫描的基础包 39 2.2.4 通过为bean添加注解实现自动装配 40 2.2.5 验证自动装配 42 2.3 通过Java代码装配 ...

    spring-basic:弹簧基础

    spring Bean 自动装配(xml) spring Bean 自动装配(注释)@Atutowired Spring自定义事件(spring自定义事件) 春天@Profile Spring Profile XML 配置 spring-aop 初识spring aop AOP(注解) 弹簧 mvc 1.第...

    25个经典的Spring面试问答

    请解释Spring Bean的自动装配 请解释自动装配模式的区别 如何开启基于注解的自动装配 请举例解释Required annotation 请举例解释Autowired注解 请举例说明Qualifier注解 构造方法注入和设值注入有什么区别 Spring...

    基于java的企业级应用开发:Bean的配置.ppt

    要想使用这个工厂生产和管理Bean,就需要在配置文件中告诉它需要哪些Bean,以及需要使用何种方式将这些Bean装配到一起。 小提示: Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类...

    Jimmy-Ma#SpringDemo#004.自动装配(XML)1

    使用autowire属性指定自动装配的方式byName根据bean的名字和当前bean的setter风格属性名进行自动装配若有匹配,则自动转配若无匹配,则不装配

    模拟实现Spring的IOC

    2、本工程,模拟实现Spring的IOC,将xml中配置的Bean读入到Spring容器中,并在测试用例中调用Spring容器中的bean。 3、开发环境eclipse,jdk1.6。使用第三方jar包有:jdom.jar(用于解析xml文件),junit-4.4.jar...

    Spring — 基于Java类的配置 代码实例

    基于Java类的配置方法和基于XML或基于注解的配置方式相比,前者通过代码的方式更加灵活地实现Bean的实例化及Bean之间的装配,但后面两者都是通过配置声明的方式,在灵活性上要稍逊一些,但是配置上要更简单一些。

    java面试Spring.pdf

    1. Spring 介绍 1.1 Spring 的优点 1.2 Spring 的缺点 1.3 详细讲解一下核心容器(spring context应用上下文) 模块 ...Spring的自动装配 Spring框架中都用到了哪些设计模式? Spring框架中有哪些不同类型的事件?

    Spring demo

    简易的spring demo,包含了bean自动装配,泛型依赖注入,Aop切面编程的实例

    Spring面试专题.pdf

    16、请解释 Spring Bean 的自动装配? 17、请解释自动装配模式的区别? 18、如何开启基于注解的自动装配? 19、请举例解释@Required 注解? 20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、...

    Spring面试题.zip

    16、请解释 Spring Bean 的自动装配? 17、请解释自动装配模式的区别? 18、如何开启基于注解的自动装配? 19、请举例解释@Required 注解? 20、请举例解释@Autowired 注解? 21、请举例说明@Qualifier 注解? 22、...

    Spring面试题含答案.pdf

    32. 什么是 bean 的自动装配? 33. 解释不同方式的自动装配 34.自动装配有哪些局限性? 35. 你可以在 Spring 中注入一个 null 和一个空字符串吗? 36. 什么是基于 Java 的 Spring 注解配置? 给一些注解的例子 37. ...

    spring配置文件详解--真的蛮详细

    spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring配置文件是一个或多个标准的XML文档...

    spring的ppt

    开始spring之旅;装配bean;创建切面;使用Aspectj进行AOP开发;使用pojo+xml进行AOP开发;征服数据库-jdbc;征服数据库-集成hibernate;事务管理;事务管理-spring2.5配置方式;事务管理-注解驱动事务等等。

    华为技术专家整理Spring Boot 注解大全.docx

    @EnableAutoConfiguration 自动配置。 @ComponentScan 组件扫描,可自动发现和装配一些 Bean。 @Component 可配合 CommandLineRunner 使用,在程序启动后执行一些基础任务。 @RestController 注解是 @Controller...

Global site tag (gtag.js) - Google Analytics