一、通过resource容器加载
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
public class ResourceTest {
// 测试ClassPathResource
@Test
public void testClassPathResource() throws Exception {
Resource resource1 = new ClassPathResource("pde/ams/c_resource/applicationContext_dao.xml");
Resource resource2 = new ClassPathResource("applicationContext_dao.xml", this.getClass());
System.out.println(resource1.getFile().getAbsolutePath());
System.out.println(resource2.getFile().getAbsolutePath());
}
// FileSystemResource
// UrlResource
@Test
public void test2() throws Exception {
Resource resource = new FileSystemResource("c:/applicationContext.xml");
System.out.println(resource.exists());
System.out.println(resource.getFile().getAbsolutePath());
System.out.println("\n");
Resource resource2 = new UrlResource("file://c:/applicationContext.xml");
System.out.println(resource2.exists());
System.out.println(resource.getFile().getAbsolutePath());
}
// ServletContextResource,需要在Web环境下才可以
@Test
public void testServletContextResource() {
// Resource resource = new ServletContextResource(servletContext, "/WEB-INF/classes/applicationContext.xml");
// System.out.println(resource);
}
}
使用特定格式的字符串表示各种类型的Resource
二、通过applicationContext加载容器对象
import java.util.Arrays;
import java.util.Map;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pde.ams.user.a_dao.UserDao;
public class ApplicationContextTest {
@Test
public void test1() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"pde/ams/user/d_applicationcontext/applicationContext_dao.xml");
ApplicationContext ac2 = new ClassPathXmlApplicationContext("applicationContext_dao.xml",
this.getClass());
System.out.println(ac.getBeanDefinitionCount());
System.out.println(Arrays.toString(ac.getBeanDefinitionNames()));
System.out.println(ac2.getBeanDefinitionCount());
System.out.println(Arrays.toString(ac2.getBeanDefinitionNames()));
}
// 一次加载多个配置文件
@Test
public void test2() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[] {//
"pde/ams/user/d_applicationcontext/applicationContext_service.xml",//
"pde/ams/user/d_applicationcontext/applicationContext_dao.xml" });
System.out.println(Arrays.toString(ac.getBeanDefinitionNames()));
ApplicationContext ac2 = new ClassPathXmlApplicationContext(new String[] {//
"applicationContext_dao.xml", "applicationContext_service.xml" }, this.getClass());
System.out.println(Arrays.toString(ac2.getBeanDefinitionNames()));
}
@Test
public void testMethod() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_dao.xml",
getClass());
// 获取属于指定类型的bean的名称
String[] names = ac.getBeanNamesForType(UserDao.class);
System.out.println(Arrays.toString(names));
// 获取属于指定类型的bean的信息(key是名称,value是对象实例)
Map<String, Object> map = ac.getBeansOfType(UserDao.class);
System.out.println(map);
}
}
三、三种实例化方式
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 直接指类的全名,将会使用反射直接创建实例-->
<bean name="userDao" class="pde.ams.user.a_dao.UserDaoImpl">
<property name="jdbcUrl" value="jdbc:mysql:///test111"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!-- 使用static的工厂方法创建实例 -->
<bean name="userDao2" class="pde.ams.user.e_instance.StaticDaoFactory"
factory-method="createUserDaoInstance">
<property name="jdbcUrl" value="jdbc:mysql:///test222"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!-- 使用非static的工厂方法创建实例 -->
<!-- >> 先生成工厂对象的实例 -->
<bean id="daoFactory" class="pde.ams.user.e_instance.DaoFactory2"></bean>
<!-- >> 配置对象使用指定的工厂bean中的方法创建实例 -->
<bean id="userDao3" factory-bean="daoFactory" factory-method="createUserDao">
</bean>
</beans>
public class StaticDaoFactory {
/**
* static的创建UserDao实例的工厂方法
*
* @return
*/
public static UserDao createUserDaoInstance() {
System.out.println("DaoFactory1.createUserDaoInstance()");
return new UserDaoImpl();
}
}
public class DaoFactory2 {
/**
* 创建UserDao的工厂方法(非static的)
* @return
*/
public UserDao createUserDao() {
System.out.println("DaoFactory2.createUserDao()");
return new UserDaoImpl();
}
}