Spring——IoC(二)基于XML的SpringBean的装配
来源:互联网 发布:京东网上商城淘宝 编辑:程序博客网 时间:2024/05/17 01:20
在Spring中,对象无需自己负责查找或创建与其关联的其他对象。相反,容器负责把需要相互协作的对象引用赋予各个对象。创建应用对象之间协作关系通常被称为装配(wiring),这也是依赖注入的本质。Spring中的装配主要是使用Java中反射的机制。下面来举例说明使用XML的形式来进行SpringBean的装配。
一、建立如下目录结构如图一 目录结构图所示:
图一 目录结构图
二、在lib中导入jar包如图二 jar包图所示:
图二 jar包图
三、spring-ioc.xml中进行如下配置:
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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-3.0.xsd"></beans>环境已经配置完成,下面进行代码的编写:
定义一个Performer接口:
package com.springinaction.springidol;public interface Performer {void perform();}定义一个Performer的实现类Juggler:
private int beanBags = 3;public Juggler(){}public Juggler(int beanBags){this.beanBags = beanBags;}@Overridepublic void perform() {System.out.println("JUGGLING "+beanBags+" BANBANS");}}在xml中进行如下配置:
<bean id="duke" class="com.springinaction.springidol.Juggler"/>客户端代码如下:
public class AnimalTest {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("com/configuration/spring-ioc.xml");Performer performer = (Performer)ctx.getBean("duke");performer.perform();}}下面使用构造器和属性注入的方式进行对象之间的装配:
构造器注入:
public interface Poem {public void recite();}
public class Sonnet29 implements Poem {private static String[] LINES = {"床前明月光,","疑是地上霜。","举头望明月,","低头思故乡。"};public Sonnet29(){}@Overridepublic void recite() {for(int i=0; i<LINES.length; i++){System.out.println(LINES[i]);}}}
public class PoeticJuggler extends Juggler {private Poem poem;public PoeticJuggler(Poem poem){super();this.poem = poem;}public PoeticJuggler(int beanBags, Poem poem){super(beanBags);this.poem = poem;}public void perform(){super.perform();System.out.println("While reciting......");poem.recite();}}
<bean id="sonnet29" class="com.springinaction.springidol.Sonnet29"/><bean id="poeticDuke" class="com.springinaction.springidol.PoeticJuggler"> <constructor-arg value="15"/> <constructor-arg ref="sonnet29"/></bean>
属性注入:
public class Piano implements Instrument {public Piano(){}@Overridepublic void play() {System.out.println("PLINK PLINK PLINK");}}
package com.springinaction.springidol;public class Saxophone implements Instrument {@Overridepublic void play() {System.out.println("TOOT TOOT TOOT");}}
package com.springinaction.springidol;public class Instrumentalist implements Performer {private Instrument instrument;private String song;public Instrumentalist(){}@Overridepublic void perform() {System.out.println("Playing "+song+":");instrument.play();}public void setSong(String song){this.song = song;}public String getSong(){return song;}public void setInstrument(Instrument instrument){this.instrument = instrument;}}
<bean id="saxophone" class="com.springinaction.springidol.Saxophone"/><bean id="piano" class="com.springinaction.springidol.Piano"/><!--通过set方法将一个对象注入另一个对象中--><bean id="kenny" class="com.springinaction.springidol.Instrumentalist"><property name="song" value="Jingle Bells"/><!-- <property name="instrument" ref="saxophone"/> --><property name="instrument" ref="piano"/></bean>集合的装配:
package com.springinaction.springidol;import java.util.Map;public class OneManBand implements Performer {//private Collection<Instrument> instruments;public OneManBand(){}//@Override//public void perform() {//for(Instrument instrument : instruments){//instrument.play();//}//}//public void setInstruments(Collection<Instrument> instruments){//this.instruments = instruments;//}@Overridepublic void perform(){for(String key : instruments.keySet()){System.out.println(key+": ");Instrument instrument = instruments.get(key);instrument.play();}}private Map<String, Instrument> instruments;public void setInstruments(Map<String, Instrument> instruments){this.instruments = instruments;}}
<!--List的注入--><!--Set的注入与List相同--><!-- <bean id="hank" class="com.springinaction.springidol.OneManBand"><property name="instruments"><list><ref bean="piano"/><ref bean="saxophone"/></list></property> </bean> --><!--Map的注入方式--><bean id="hank" class="com.springinaction.springidol.OneManBand"><property name="instruments"><map><entry key="Piano" value-ref="piano"/><entry key="Saxophone" value-ref="saxophone"/></map></property></bean>参考资料:《Spring in action》
0 0
- Spring——IoC(二)基于XML的SpringBean的装配
- springbean的装配
- 【Java.Spring.Core】【IoC】基于注解的Bean装配(非XML配置)
- spring笔记(二)---基于XML的Bean装配
- spring、IoC控制反转和DI依赖注入入门、基于XML的Bean装配、基于注解的Bean装配
- Spring的IOC容器—Bean的自动装配
- 简化Spring的XML配置(二)——使用注解装配bean
- Spring IOC--Bean的装配
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
- 【JavaWeb-23】spring、IoC控制反转和DI依赖注入入门、基于XML的Bean装配、基于注解的Bean装配
- spring基础-Bean的装配方式(一)基于xml的装配
- Spring In Action(二):基于XML配置装配bean
- Spring框架总结——第二部分(基于xml配置+注解的方式配置IOC)
- Spring实现控制反转(IOC)的三种方式(三)——自动装配
- Spring中的IOC(二):容器对bean属性的装配
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- Spring的IOC及bean的装配
- 日期生成 mysql
- 一小时包教会 —— webpack 入门指南
- Spring 注解学习手札(八)补遗——@ExceptionHandler
- pragma clang
- C#集合通论
- Spring——IoC(二)基于XML的SpringBean的装配
- mysql 行转列
- 猴子当大王
- fcntl.h头文件和unistd.h头文件
- block
- softmax相关。。
- iOS QQ登录提示schema配置不对,或者提示QQ需要更新的问题
- 防雪崩利器:熔断器 Hystrix 的原理与使用
- ios当前APP名称和版本号