多人开发就会用到这个
拆分配置文件
多个程序员写同一个项目时,都会各自写一个自己的配置文件,到时写好的代码又怎么来访问多个配置文件呢?这篇会说到两种解决方法
配置文件一
<?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:p="http://www.springframework.org/schema/p"
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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
<!-- 类的实列注入到工厂 -->
<!--
scope属性:
1、singleton:单列(默认值)
2、prototype:多列
3、request:WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中
4、session:WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中
5、globalSession:WEB项目中,应用在Porlet环境,如果没有Porlet环境那么globalSession相当于session
-->
<bean id="userDao" class="com.test.dao.impl.UserDaolmpl"></bean>
<!--
构造方法的方式注入属性(需要有对应的有参构造函数):
创建实列同时就注入属性
-->
<bean id="user" class="com.test.domain.User">
<constructor-arg name="id" value="1"></constructor-arg>
<constructor-arg name="username" value="haoren"></constructor-arg>
</bean>
<!-- set 方法的方式注入属性(首先使用无参把实列创建起来,然后再调用对应的set方法来进行赋值) -->
<bean id="user2" class="com.test.domain.User">
<property name="id" value="2"></property>
<property name="username" value="huairen"></property>
</bean>
<!--
Spring 的属性注入:对象类型的注入:
ref属性:引用另一个 bean的 id或 name
-->
<bean id="order" class="com.test.dao.Order">
<property name="id" value="3"></property>
<property name="name" value="毛衣"></property>
<property name="user" ref="user"></property>
</bean>
<bean id="order4" class="com.test.dao.Order">
<property name="id" value="6"></property>
<property name="name" value="秋裤"></property>
<property name="user" ref="user"></property>
</bean>
<!-- 名称空间 p 的属性注入的方式:Spring2.x 版本后提供的方式 -->
<bean id="user3" class="com.test.domain.User" p:id="4" p:username="大米"></bean>
<!-- SpEL 的方式的属性注入:Spring3.x 版本后提供的方式 -->
<!-- SpEL的注入的方式 -->
<bean id="order2" class="com.test.dao.Order">
<property name="id" value="#{5}"/>
<property name="name" value="#{'小米'}"/>
</bean>
<!-- 引用了另一个类的属性 -->
<bean id="order3" class="com.test.dao.Order">
<property name="id" value="#{order.id}"/>
<property name="name" value="#{order2.name}"/>
</bean>
</beans>
配置文件二
<?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:p="http://www.springframework.org/schema/p"
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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
<!-- Spring的复杂类型的注入 -->
<bean id="user4" class="com.test.domain.User">
<property name="username" value="复杂类型的注入"></property>
<property name="list">
<list>
<ref bean="order"/>
<ref bean="order4"/>
</list>
</property>
</bean>
</beans>
一、创建工厂的时候加载多个配置文件
ApplicationContext ap = new ClassPathXmlApplicationContext(“applicationContext1.xml”,“applicationContext2.xml”);
package springpro1;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.test.dao.Order;
import com.test.dao.UserDao;
import com.test.domain.User;
/*
* ClassPathXmlApplicationContext:加载类路径下Spring的配置文件
* FileSystemXmlApplicationContext:加载本地磁盘下Spring的配置文件
*
* BeanFactory与ApplicationContext区别:
* 前者是在getBean的时候才会生成类的实列(在硬件比较差的地方使用)
* 后者在加载applicationContext.xml(容器启动)时候就会创建,占内存
*
*/
public class TestDemo1 {
@Test
public void test2() {
ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext1.xml","applicationContext2.xml");
User user = (User) ap.getBean("user");
System.out.println(user.getId()+" "+user.getUsername());
User user2 = (User) ap.getBean("user2");
System.out.println(user2.getId()+" "+user2.getUsername());
Order order = (Order) ap.getBean("order");
System.out.println(order.getId()+" "+order.getName()+" "+order.getUser().getId()+" "+order.getUser().getUsername());
User user3 = (User) ap.getBean("user3");
System.out.println(user3.getId()+" "+user3.getUsername());
Order order2 = (Order) ap.getBean("order2");
System.out.println(order2.getId()+" "+order2.getName());
Order order3 = (Order) ap.getBean("order3");
System.out.println(order3.getId()+" "+order3.getName());
System.out.println("------------------------------------------------------------------------------------------------");
User user4 = (User) ap.getBean("user4");
System.out.println(user4.getUsername());
List<Order> list = user4.getList();
Iterator<Order> iterator = list.iterator();
while(iterator.hasNext()) {
Order next = iterator.next();
System.out.println(next.getId()+" "+next.getName()+" "+next.getUser().getId()+" "+next.getUser().getUsername());
}
}
}
二、在一个配置文件中包含另一个配置文件
建一个主配置文件,然后使用 import ,测试的时候就可以写主配置文件的名字了
<?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:p="http://www.springframework.org/schema/p"
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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
<import resource="applicationContext1.xml"></import>
<import resource="applicationContext2.xml"></import>
</beans>