ApplicationContext
取得 ApplicationContext的方法
ApplicationContext ctx = new ClassPathXmlApplicationContext(" ");默认是classpath相对路径,也可以用显示的使用file绝对路径"file: "
ApplicationContext ctx =new FileSystemClassPathXmlApplicationContext( " " );默认是file绝对路径,也可以显示的用classpath相对路径,此处的相对路径是指项目的目录。
取得beanfactory的方法
Resource resource = new FileSystemResource("beans.xml");此处与ApplicationContext用法雷同 BeanFactory factory = new XmlBeanFactory(resource);
ClassPathResource resource = new ClassPathResource("beans.xml");此处与ApplicationContext用法雷同 BeanFactory factory = new XmlBeanFactory(resource);
国际化支持
例子:
<beans>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames"> //也可以是单数beanname,这里是指基名,国际化文件前面部分。
<list> //单数时不用list
<value>messages</value>
</list>
</property>
</bean>
</beans>
取得消息:
String greeting = context.getMessage("greeting", null,Locale.ENGLISH);
String date = context.getMessage("date",new Object[]{new Date()} , Locale.ENGLISH);
资源访问
提供了统一的接口无关协议
ApplicationContext.getResource();取得资源的句柄 "classpath:" 或"file:"
事件传播
ApplicationContext中的事件处理是通过
ApplicationEvent
类和ApplicationListener
接口来提供的ApplicationEven类 继承这个类,
ApplicationListener接口 创建一个类实现此接口,有一个方法能监到事件发生,从中选出自己要用的事件。
通过ApplicationContext. publishEvent方法发布事件,注册了的所有监听器都会收到事件。
例子:
事件
package org.eric.lesson03.event;
import org.springframework.context.ApplicationEvent;
public class LockedIp extends ApplicationEvent {
public LockedIp(Object source) { //事件源,这个对象非常有用。
super(source);
}}
监听器
package org.eric.lesson03.event;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;public class LockedIpListner implements ApplicationListener {
private Log log = LogFactory.getLog(LockedIpListner.class);
public void onApplicationEvent(ApplicationEvent event) { //此方法会响应所有发生的事件,从中选出自己要监听的事件。
if(event instanceof LockedIp){
log.info("Locked IP ["+event.getSource()+"] try to login");
}
}}
事件的发布
package org.eric.lesson03.event;
import java.util.List;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;public class UserManager implements ApplicationContextAware { //实现此接口取得ApplicationContext
private ApplicationContext context;
private List lockips;
public List getLockips() {
return lockips;
}public void setLockips(List lockips) {
this.lockips = lockips;
}public boolean login(String username, String password, String ip) {
if (lockips.contains(ip)) {
context.publishEvent(new LockedIp(ip)); //发布事件的方法
return false;
} else
return true;
}public void setApplicationContext(ApplicationContext context)//实现此上面接口的此方法取得ApplicationContext
throws BeansException {this.context = context;
}
}