天天看点

Spring 基础

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