一、通过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(); } }