Spring的命名空间
一、总述

二、具体实验
2.1引入自定义命名空间
首先要加入要引入的东西的坐标(也就是pom文件中的依赖,以引入springmvc为例)
java
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
其次是改Spring的配置文件:
刚开始是这样:
java
<?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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl2" autowire="byType">
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
</beans>
要引入mvc,只需要加三个地方(其实如果是Spring的组件的话都是类似的,可以复制粘贴,然后改不同的即可,不是Spring的组件就得自己去找命名空间及命名空间约束了)
命名空间
java
xmlns:mvc="http://www.springframework.org/schema/mvc"
命名空间、schane地址(jar包命名空间对应的虚拟地址,下面两个必须是成对的):
java
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd
最后是这样:
java
<?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:util="http://www.springframework.org/schema/util"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl2" autowire="byType">
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
</beans>
然后就可以引入mvc标签了:
java
<?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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
<mcv:annotation-driven/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl2" autowire="byType">
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
</beans>
2.2标签配置不同的环境
使用方式:
1、在配置文件中使用beans的profile属性来进行声明:
java
<beans profile="dev">
<!-- 再在环境里面像正常一样配置bean-->
<bean class="com.itheima.service.impl.UserServiceImpl2" id="userServiceImpl2"/>
</beans>
<!-- 再配置一个测试环境-->
<beans profile="test">
<bean class="com.itheima.dao.impl.UserDaoImpl" id="userDao"/>
</beans>
2、使用System.setProperty("spring.profiles.active","环境名来进行调用"),例如:
java
System.setProperty("spring.profiles.active","test");
java
System.setProperty("spring.profiles.active","dev");
测试:
java
package com.itheima.test;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.service.UserService;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.xml.bind.annotation.XmlAccessOrder;
public class BeanFactoryTest {
public static void main(String[] args) {
System.setProperty("spring.profiles.active","test");
// 直接使用ApplicationContex来进行加载
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext_beanfac.xml");
System.out.println(applicationContext.getBean("userDao1"));
}
}

2.3使用标签将子配置文件导入主配置文件中
使用方式:
1、在子配置文件中定义bean
applicationContextOrder.xml:
java
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"></bean>
</beans>
applicationContextUser.xml:
java
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
</beans>
2、在主配置文件中使用标签
java
<?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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
<import resource="classpath:applicationContextOrder.xml"/>
<import resource="classpath:applicationContextUser.xml"/>
</beans>
测试及结果:
java
package com.itheima.test;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.service.UserService;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.xml.bind.annotation.XmlAccessOrder;
public class BeanFactoryTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext_beanfac.xml");
System.out.println(applicationContext.getBean("userService"));
System.out.println(applicationContext.getBean("userDao"));
}
}

2.4使用标签进行取别名
但是使用name属性也可以,只不过 是一个单独的标签而已。
实验:
java
<bean class="com.itheima.dao.impl.UserDaoImpl" id="userDao" name="aaa,bbb"/>
<!-- 使用alias标签起别名-->
<alias name="userDao" alias="xxx"/>
<alias name="userDao" alias="yyy"/>
结果:

