简介:
Spring的BeanFactory接口是Spring框架的最核心接口,它提供了高级IoC配置机制,Spring为BeanFactory提供了多种实现,其中最常用的XmlBeanFactory,它的getBean()方法可以从指定的XML文件中读取数据,返回特定的Bean. 本文从最简单的例子来展示如何使用BeanFactory
Bike类:
package com.james.beanfactory; public class Bike { private String brand; private String type; private int price; public Bike() { System.out.println("In Bike Constructor"); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public void display(){ System.out.println("This is " + brand + " " + type + ", You can get me by CNY: " + price); } public void rideTo(String add){ System.out.println("Riding to: " + add); } }
Rider类:
package com.james.beanfactory; public class Rider { private String name; private Bike bike; public String getName() { return name; } public void setName(String name) { this.name = name; } public Bike getBike() { return bike; } public void setBike(Bike bike) { this.bike = bike; } public void rideTo(String to) { System.out.println("In Rider.rideTo()"); bike.rideTo(to); } }
XML bean配置文件:
<?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-3.0.xsd"> <bean id="bike" class="com.james.beanfactory.Bike" p:brand="Giant" p:type="ATX 770D" p:price = "2598" /> <bean id="rider" class="com.james.beanfactory.Rider" p:name="james" p:bike-ref="bike" /> </beans>
测试类:
package com.james.beanfactory; import java.io.IOException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; public class BeanTest { public static void main(String[] args) throws IOException { // Read the XML configuration file. ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource res = resolver.getResource("classpath:com/james/beanfactory/beans.xml"); System.out.println(res.getURL()); // Get and use bean. BeanFactory bf = new XmlBeanFactory(res); Bike myBike = bf.getBean("bike", Bike.class); myBike.display(); // A Rider contains a Bike, The dependancy is set in xml. Rider r = bf.getBean("rider", Rider.class); r.rideTo("Tibet"); } }
运行结果:
file:/E:/masterSpring/chapter3/WebRoot/WEB-INF/classes/com/james/beanfactory/beans.xml 2013-11-02 22:35:15,823 INFO [main] (XmlBeanDefinitionReader.java:315) - Loading XML bean definitions from class path resource [com/james/beanfactory/beans.xml] In Bike Constructor This is Giant ATX 770D, You can get me by CNY: 2598 In Rider.rideTo() Riding to: Tibet
说明:
- 此处我们的Bike和Rider都不需要参数去构造
- XML的配置文件里我们传递的是Bike和Rider的属性,以及一个依赖关系
- 可以使用多种注入方式获取一个Bean,本例子仅仅只是用了属性注入