Spring之初始化容器对象和实例化的方式

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

猜你喜欢

转载自blog.csdn.net/weixin_40931184/article/details/80292324