spring 基础
一、认识bean
在spring中,那些组成应用的主体(backbone)及由spring ioc容器所管理的对象被称之为bean。简单地讲,bean就是由spring容器初始化、装配及被管理的对象,除此之外,bean就没有特别之处了(与应用中的其他对象没有什么区别)。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
二、认识beanfactory
org.springframework.beans.factory.beanfactory是spring ioc容器的实际代表者,ioc容器负责容纳此前所描述的bean,并对bean进行管理。
beanfactory负责读取bean定义文件,管理对象的加载、生成、维护bean对象与bean对象之间的依赖关系,负责bean的生命周期,对于简单的应用程序来说,使用beanfactory就足够来管理bean,在对象的管理上就可以获得许多的便利性。
beanfactory是整个spring围绕的重点。它负责读取bean配置管理。可以借由getbean()方法来获取bean的实例。
三、applicationcontext
不过作为一个应用程序框架,只提供bean容器管理的功能是不够的,若要利用spring所提供的一些特色以及高级的容器功能,则可以使用beanfactory的子接口applicationcontext,此接口的基本功能与beanfactory接口很相似,另外还提供了一个应用程序所需的更完整的框架功能:
1、提供获取资源文件的更方便的方法;
2、提供文字消息解析的方法;
3、支持国际化消息;
4、applicationcontext可以发布时间,对时间感兴趣的bean可以接收到这些事件。
简而言之,beanfactory提供了配制框架及基本功能,而applicationcontext则增加了更多支持企业核心内容的功能。applicationcontext完全由beanfactory扩展而来,因而beanfactory所具备的能力和行为也适applicationcontext
spring的创始者rod johnson建议使用applicationcontext来取代beanfactory,在实现applicationcontext的类中,最常使用的大概是一下三个:
org.springframework.context.support.classpathxmlapplicationcontext
org.springframework.context.support.filesystemxmlapplicationcontext
org.springframework.web.context.support.xmlwebapplicationcontext
四、接口选择之惑
在实际应用中,用户有时候不知道到底是选择beanfactory接口还是applicationcontext接口。但是通常在构建j2ee应用时,使用applicationcontext将是更好的选择,因为它不仅提供了beanfactory的所有特性,同时也允许使用更多的声明方式来得到我们想要的功能。
五、spring的bean配置
spring支持三种配置元数据格式:xml格式、java属性文件格式或使用spring公共api编程实现。
六、实例化spring ioc容器
resource resource = new filesystemresource("beans.xml");
beanfactory factory = new xmlbeanfactory(resource);
classpathresource resource = new classpathresource("beans.xml");
applicationcontext context = new filesystemxmlapplicationcontext("beans.xml");
applicationcontext context = new classpathxmlapplicationcontext(new string[] {"applicationcontext.xml", "applicationcontext-part2.xml"});
// of course, an applicationcontext is just a beanfactory
beanfactory factory = (beanfactory) context;
七、spring demo
注入一个bean,通过bean上下文工具获取bean对象并输出其中的属性。
/**
* created by intellij idea.<br>
* <b>user</b>: leizhimin<br>
* <b>date</b>: 2008-4-17 16:53:54<br>
* <b>note</b>: 测试bean
*/
public class person {
private string name;
private string age;
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
public string getage() {
return age;
public void setage(string age) {
this.age = age;
}
package com.lavasoft.springnote.ch01;
import org.springframework.context.applicationcontext;
import org.springframework.context.support.classpathxmlapplicationcontext;
* <b>date</b>: 2008-4-18 15:00:46<br>
* <b>note</b>: spring上下文工具
public class beancontexthelper {
private static applicationcontext applicationcontext;
static {
applicationcontext = buildapplicationcontext();
private beancontexthelper() {
/**
* 重新构建applicationcontext对象
* @return applicationcontext
*/
public static applicationcontext buildapplicationcontext() {
return new classpathxmlapplicationcontext("applicationcontext.xml");
* 获取一个applicationcontext对象
public static applicationcontext getapplicationcontext() {
return applicationcontext;
<?xml version="1.0" encoding="utf-8"?>
<!doctype beans public "-//spring//dtd bean//en" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="person" class="com.lavasoft.springnote.ch01.person">
<property name="name">
<value>lavasoft</value>
</property>
<property name="age">
<value>22</value>
</bean>
</beans>
import org.springframework.beans.factory.beanfactory;
import org.springframework.beans.factory.xml.xmlbeanfactory;
import org.springframework.core.io.resource;
import org.springframework.core.io.filesystemresource;
* <b>date</b>: 2008-4-17 16:58:54<br>
* <b>note</b>: beanfactory获取工具(测试版)
public class springutils {
private static springutils _instance = new springutils();
private springutils() {
public static classpathxmlapplicationcontext getclasspathxmlapplicationcontext() {
classpathxmlapplicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
return context;
public static beanfactory getbeanfactory() {
resource rs = new filesystemresource("applicationcontext.xml");
beanfactory factory = new xmlbeanfactory(rs);
return factory;
* <b>date</b>: 2008-4-17 16:58:07<br>
* <b>note</b>: 客户端测试
public class test {
public static void main(string args[]) {
test test = new test();
test.test3();
// test.test2();
public void test1() {
//bean的配置文件“/applicationcontext.xml”必须位于classpath下
beanfactory factory = springutils.getbeanfactory();
person person = (person) factory.getbean("person");
system.out.println(person.getname());
system.out.println(person.getage());
public void test2(){
//bean的配置文件“/applicationcontext.xml”必须位于源码src下
applicationcontext context = springutils.getclasspathxmlapplicationcontext();
person person = (person) context.getbean("person");
public void test3(){
applicationcontext context = beancontexthelper.getapplicationcontext();
运行结果:
log4j:warn no appenders could be found for logger (org.springframework.core.collectionfactory).
log4j:warn please initialize the log4j system properly.
lavasoft
22
process finished with exit code 0