Spring备忘一(涵盖Spring2.5)

BeanFactory & ApplicationContext

在spring中容器分为两类:

n BeanFactory

n ApplicationContext

BeanFactory:

从名字上面可以看出,BeanFactory使用的是工厂设计模式。也就是说这个类可以分发所有的Bean。

BeanFactory接口有多种实现,常用的为XmlBeanFactory。

//用BeanFactory读取classpath中的spring配置文件

BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));

//用BeanFactory读取文件系统中的spring配置文件

BeanFactory factory = new XmlBeanFactory(new FileSystemResource("C:/spring.xml"));

ApplicationContext:

对于简单的应用BeanFactory已经足够强大了,但是为了获得spring提供的更强大的功能,则要使用更高级的spring容器ApplicationContext。ApplicationContext和BeanFactory都是从配置文件中载入Bean的定义,进行装配,然后根据需要进行分发Bean。但是ApplicationContext提供了如下的更多功能:

n 提供了文本解析工具,包括I18N国际化;

n 提供了载入文件资源的通用方法;

n 可以向注册为监听器的Bean发送事件。

在ApplicationContext的实现中,三个实现经常用到:

n ClassPathXmlApplicationContext 从classpath(包含jar)中读取spring配置文件

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

n FileSystemXmlApplicationContext 从文件系统中读取spring配置文件

ApplicationContext context = new FileSystemXmlApplicationContext("C:/spring.xml");

n XmlWebApplicationContext 从web系统中读取spring配置文件

除了ApplicationContext提供的附加功能外,,ApplicationContext和BeanFactory的一个重要区别是关于单例Bean是如何被载入的。BeanFactory延迟加载所有的Bean,直到getBean()方法被调用的时候Bean才会被创建。ApplicationContext则会预载入单例Bean,当调用getBean()方法的时候,Bean已经被创建成功。

spring配置文件的schema

<?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.0.xsd">

</beans>

在spring配置文件中配置一个bean

<bean id="userDao" class="com.kay.dao.impl.UserDAOImpl"></bean>

<bean name="userDao" class="com.kay.dao.impl.UserDAOImpl"></bean>

注意id和name属性的区别及联系:

id和name属性都是用来指定bean标识符。id具有唯一性,并且是xml中真正的id属性,受到xml解析器的验证功能,在使用中必须和java中命名变量一样去命名id的值,比如不能以数字开始等约束。但是name属性值则没有要求,如果愿意,可以赋给的值为“123”等,name属性还可以使用”,”号来进行分割多个为该bean指定的标识(别名),例如:

<bean name="userDao,dao,user" class="com.kay.dao.impl.UserDAOImpl"></bean>

name属性并不是必须的,当不写name属性时,spring容器会自动生成name属性值。

<bean class="com.kay.dao.impl.UserDAOImpl"></bean>

那么在获取该bean的时候,name属性和class属性值相同。

如果在spring配置文件中同时这样声明了三个相同的bean:

<bean class="com.kay.dao.impl.UserDAOImpl"></bean>

<bean class="com.kay.dao.impl.UserDAOImpl"></bean>

<bean class="com.kay.dao.impl.UserDAOImpl"></bean>

那么name的值分别为:

com.kay.dao.impl.UserDAOImpl

com.kay.dao.impl.UserDAOImpl#1

com.kay.dao.impl.UserDAOImpl#2

posted @ 2009-05-11 18:38  樊凯  阅读(853)  评论(0编辑  收藏  举报