一、这个接口有什么用?
当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
二、创建类ApplicationContextUtil并实现ApplicationContextAware接口:
package com.ly.model;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class ApplicationContextUtil implements ApplicationContextAware{
//建立一个静态 ApplicationContext applicationContext
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("进入ApplicationContextUtil=====》》》》");
this.applicationContext=applicationContext;
}
//创建一个得到bean类"bean"的方法
public static Object getBean(String beanName){
return applicationContext.getBean(beanName);
}
//创建一个得到bean.Class的方法
public static <T> T getBean(Class<T> beanClass){
return applicationContext.getBean(beanClass);
}
}
三、Spring配置
<?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">
<!-- Spring配置工具类ApplicationContextUtil -->
<bean id="applicationutil" class="com.ly.model.ApplicationContextUtil"></bean>
<!-- 以下为两个类 -->
<bean id="user" class="com.ly.model.User" init-method="initmethod" destroy-method="destroymethod">
<property name="id" value="1001"></property>
<property name="name" value="张三"></property>
<property name="address" value="成都"></property>
</bean>
<bean id="car" class="com.ly.model.Car">
<property name="brand" value="audi"></property>
<property name="price" value="300000"></property>
</bean>
</beans>
四、得到类的实例测试:
package com.ly.control;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ly.model.ApplicationContextUtil;
import com.ly.model.Car;
import com.ly.model.User;
public class SpringTest {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("springBeans.xml");
//得到配置的id为applicationutil的ApplicationContextUtil类
ApplicationContextUtil util=(ApplicationContextUtil) context.getBean("applicationutil");
//通过调用类名.Class方法得到user实例
User user1=util.getBean(User.class);
System.out.println(user1.getId()+"----"+user1.getName()+"----"+user1.getAddress());
System.out.println("--------------------------------------------");
//通过调用getBean方法中String beanName得到user实例
Car car= (Car) util.getBean("car");
System.out.println(car.getBrand()+"----"+car.getPrice());
}
}
四、web.xml中配置
这样子的话只会读取默认路径(web-inf)下的application.xml配置文件的。如果需要读取特定路径下的配置文件。需要在web.xml中
添加如下信息。可以参考我的示例,指定配置文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Spring</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springBeans.xml</param-value>
</context-param>
</web-app>
contextConfigLocation不能改变