Spring2 ApplicationContext

 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;
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值