在spring中如何配置和使用一個Bean

在Spring中,那些組成你應用程序的主體(backbone)及由Spring IoC容器所管理的對象,被稱之爲bean。 簡單地講,bean就是由Spring容器初始化、裝配及管理的對象,除此以外,bean就與應用程序中的其餘對象沒有什麼區別了。 而bean定義以及bean相互間的依賴關係將經過配置元數據來描述。java

spring推薦面向接口編程
spring

package cn.nevo.service;

public interface HelloService {
	public void sayHello();
}

package cn.nevo.service.impl;

import cn.nevo.service.HelloService;

public class HelloServiceImpl implements HelloService {
	private String message;
	
	//當用set注入時,一個空的構造方法是必須的
	public HelloServiceImpl() {}
	public HelloServiceImpl(String message) {
		this.message = message;
	}
	
	public void setMessage(String message) {
		this.message = message;
	}
	
	@Override
	public void sayHello() {
		System.out.println("hello " + message);
	}
}

spring配置文件bean.xml(在這裏決定如何配置bean及多個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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <bean id="helloService" class="cn.nevo.service.impl.HelloServiceImpl">
  	<!-- 採用此種注入方式,容器實例化配置的Bean:HelloServiceImpl的時候會調用
             它的setMessage方法完成賦值 -->
	<property name="message">
		<value>world!</value>
	</property>
	 
	<!--
	採用此種注入方式,容器會使用帶有一個參數的構造器
        實例化配置的Bean:HelloServiceImpl從而完成賦值
	<constructor-arg>
		<value>world!</value>
	</constructor-arg>
	-->
  </bean>

</beans>


一般咱們會看到拆分的元數據配置文件,這種作法是值得推薦的,它使得各個模塊之間的開發分工更明確,互不影響,如:ide

<beans>
    <import resource="model1.xml"/>
    <import resource="model2.xml"/>
    <import resource="model3.xml"/>

    <bean id="bean1" class="..."/>
    <bean id="bean2" class="..."/>
</beans>


測試類HelloServiceTest.java 測試

package cn.nevo.service;

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

import cn.nevo.service.impl.HelloServiceImpl;


public class HelloServiceTest {
	@Test
	public void testHelloService() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
		HelloService hs = (HelloServiceImpl)ctx.getBean("helloService");
		hs.sayHello();
	}
}
 

Spring IoC容器經過讀取spring配置文件實例化,以下面的例子:this

ApplicationContext context = new ClassPathXmlApplicationContext(
        new String[] {"services.xml", "daos.xml"});// an ApplicationContext is also a BeanFactory (via inheritance) 
BeanFactory factory = context;

 

org.springframework.beans.factory.BeanFactory 是Spring IoC容器的實際表明者,IoC容器負責容納此前所描述的bean,並對bean進行管理。在Spring中,BeanFactory是IoC容器的核心接口。 它的職責包括:實例化、定位、配置應用程序中的對象及創建這些對象間的依賴。Spring爲咱們提供了許多易用的BeanFactory實現。spa

org.springframework.context包的核心是ApplicationContext接口。它由BeanFactory接口派生而來,於是提供了BeanFactory全部的功能。而且提供了一些更加通用的實現。BeanFactory就是spring容器,負責如何建立,配置和管理咱們的Bean,採用工廠模式實現Ioc,將系統配置和依賴關係從具體業務代碼中獨立出來。.net

Spring IoC容器將讀取配置元數據,並經過它對應用中各個對象進行實例化、配置以及組裝。code

Beanfactory接口結構圖:xml

QQ截圖20120724145213

本示例項目結構圖:

QQ截圖20120724141915

相關文章
相關標籤/搜索