Spring接口容器加载配置文件

去年记得有一次面试,提问Spring装载Bean和初始化的问题,回答的并不好。重新整理下思路。

首先先从加载Spring配置文件说起。

1     ApplicationContext  接口容器

ApplicationContext 接口用于加载Spring配置文件,实现类为ClassPathXmlApplicationContext  和  FileSystemXmlApplicationContext,如下图:

a、配置文件在类路径下

b、配置文件在本地目录

c、配置文件在项目跟路径下

2     BeanFactory 接口容器

BeanFactory 接口是 ApplicationContext接口的父类

一般使用 XmlBeanFactory 实现类 加载 Spring 配置文件

XmlBeanFactory的结构:

参数Resource 是接口,有两个实现类:

ClassPathResource : 指定类路径下的资源文件
FileSystemResouce : 指定项目根路径或本地磁盘路径下的资源文件

在创建了 BeanFactory 容器后,通过使用 getBean() 方法,从容器中获得指定的 Bean 对象

编写测试代码举例(spring配置文件我放在了src/resource目录下):

 

3     两个接口容器的区别

区别的本文的重点,也是之前面试的答案。

ApplicationContext 容器 和 BeanFactory 容器 加载的是同一个配置文件,但在代码中这两个容器对象,不是同一个他们对于容器内对象装配时机是不同的。

     a、ApplicationContext 容器中对象的装配时机

     ApplicationContext  容器,会在容器对象初始化时,将其中的所有对象一次性装配好,之后可以直接从内存中获得对象,执行效率高,占用内存。

     b、BeanFactory 容器中对象的装配时机

     BeanFactoy  容器,对容器中的对象的装配与加载采用延迟加载策略,只有在第一次真正调用 getBean() 时,才真正装配该对象。

当然 Bean 本身的装配方式也 值得一说,先挖个坑~~~

 

Spring-dao-JDBC模板之Spring注册数据源

感觉写的时候 很奇妙啊

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:context=”http://www.springframework.org/schema/context” xsi:schemaLocation=”
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd”>

<!– 注册数据源: Spring内置的数据源 –>
<!– <bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>
<property name=”driverClassName” value=”com.mysql.jdbc.driver”/>
<property name=”url” value=”jdbc:mysql://127.0.0.1:3306/test”/>
<property name=”username” value=”root”/>
<property name=”password” value=”root”/>
</bean> –>

<!– 注册数据源: C3P0数据源 –>
<bean id=”dataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource”>
<property name=”driverClass” value=”${jdbc.driver}”/>
<property name=”jdbcUrl” value=”${jdbc.url}”/>
<property name=”user” value=”${jdbc.user}”/>
<property name=”password” value=”${jdbc.password}”/>
</bean>

<!– 注册数据源: DBCP数据源 –>
<!– <bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
<property name=”driverClassName” value=”com.mysql.jdbc.driver”/>
<property name=”url” value=”jdbc:mysql://127.0.0.1:3306/test”/>
<property name=”username” value=”root”/>
<property name=”password” value=”root”/>
</bean> –>

<!– 注册jdbc属性文件 –>
<context:property-placeholder location=”classpath:jdbc.properties”/>
<!– <bean id=”jdbcTemplate” class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
<property name=”location” value=”classpath:jdbc.priperties”/>
</bean>
–>

<!– 注册Jdbc模板对象与Dao –>
<bean id=”studentDao” class=”com.gotkx.dao.StudentDaoImpl”>
<property name=”dataSource” ref=”dataSource”/>
</bean>

<!– 注册Jdbc模板对象 –>
<!– <bean id=”jdbcTemplate” class=”org.springframework.jdbc.core.JdbcTemplate”>
<property name=”dataSource” ref=”dataSource”/>
</bean> –>

<!– 注册Dao –>
<!– <bean id=”studentDao” class=”com.gotkx.dao.StudentDaoImpl”>
<property name=”jdbcTemplate” ref=”jdbcTemplate”/>
</bean> –>

<!– 注册Service –>
<bean id=”studentService” class=”com.gotkx.service.StudentServiceImpl”>
<property name=”dao” ref=”studentDao”/>
</bean>

</beans>