实现的功能以及各文件间的关系
IHelloMessage:一个接口,用于定义输出问候信息。
HelloWorld、HelloChina:接口的实现类。在这里表示人在不同的地方
Person:一个人物类,调用IHelloMessage接口,向用户输出问候信息
Main:程序的入口类,用于加载配置文件以及启动IOC容器,调用人物类,向用户输出问候信息
IHelloMessage
public interface IhelloMessage {public String sayHello();public String say();}
HelloWorld、HelloChina
public class HelloWord implements IhelloMessage {@Overridepublic String sayHello() {// TODO Auto-generated method stubreturn "Hello World";}@Overridepublic String say() {// TODO Auto-generated method stubreturn "ceshi";}}
Person
public class Person {private IhelloMessage helloMessage;public void setHelloMessage(IhelloMessage helloMessage) {this.helloMessage = helloMessage;}public IhelloMessage getHelloMessage() {return helloMessage;}public String sayHello() {return helloMessage.say();}}
Main
public class Main {public static void main(String[] args) {// 读取配置文件Resource resource = new FileSystemResource("helloMessage.xml");// 加载并启动IOC容器BeanFactory factory = new XmlBeanFactory(resource);// 从容器中获取实例Person person = (Person) factory.getBean("person");String str = person.sayHello();System.out.println(str);}}
spring3.1以上的版本中XmlBeanFactory已过时,有两种解决方案
1.将XmlBeanFactory替换成DefaultListableBeanFactory和XmlBeanDefinitionReader,代码如下Main类所写
public class Main {public static void main(String[] args) {// 读取配置文件Resource resource = new FileSystemResource("helloMessage.xml");// 构造工厂DefaultListableBeanFactory factory= new DefaultListableBeanFactory ();// 通过构造工厂得到加载并启动IOC容器XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);// 将读取到的配置文件加载到容器中 reader.loadBeanDefinitions(resource);// 从容器中获取实例Person person = (Person) factory.getBean("person");String str = person.sayHello();System.out.println(str);}}
2.使用其它几种方式加载配置文件。详见Spring---加载配置文件的几种方法(org.springframework.beans.factory.BeanDefinitionStoreException)
配置文件xml
Java bean
每个bean对应一个java文件,当这个类文件配置到spring容器当中后,就变成了一个一个小豆子,而每个小豆子都拥有自己独立的功能。在运行spring工程之前,我们需要做的有两件事情。第一,将这些java类以java bean的形式注册到spring容器中。第二,通过配置文件来配置java bean之间的依赖关系。各个单独的类(组件)只需要关心自己的核心业务逻辑,而它们之间的依赖关系,则交由spring容器来配置和管理,这就是控制反转,而相对于类(组件),我们则可以称为依赖注入。以下是配置文件的示例代码
<?xml version="1.0" encoding="UTF-8"?> <!-- 定义使用哪种规范进行解析配置文件 --> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans><!-- bean:定义java bean --><bean id = "helloWorld" class = "com.hudongwu.spring.chapter01.HelloWord"></bean><bean id = "helloChina" class = "com.hudongwu.spring.chapter01.HelloChina"></bean><bean id = "person" class = "com.hudongwu.spring.chapter01.Person"><!-- 与其它java bean建立依赖关系 --><property name="helloMessage" ref="helloWorld"></property></bean> </beans>