【spring】spring 通过ApplicationContextAware 获取bean

本文介绍了一个实用的 Spring Context 工具类,该类通过实现 ApplicationContextAware 接口来提供便捷的 Spring 上下文操作方法,如获取 Bean、检查 Bean 存在性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<bean id="SpringContextUtil " class="com.xx.SpringContextUtil " singleton="true" />

当对SpringContextUtil 实例时调用setApplicationContext方法设置applicationContext,以便后来可直接用applicationContext **实现ApplicationContextAware **

public class SpringContextUtil implements ApplicationContextAware {  
  private static ApplicationContext applicationContext;     //Spring应用上下文环境  
   
  /** 
  * 实现ApplicationContextAware接口的回调方法,设置上下文环境    
  */  
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
    SpringContextUtil.applicationContext = applicationContext;  
  }  
   
  
  public static ApplicationContext getApplicationContext() {  
    return applicationContext;  
  }  
   
  /** 
  * 获取对象    
  *Object 一个以所给名字注册的bean的实例 
  * @throws BeansException 
  */  
  public static Object getBean(String name) throws BeansException {  
    return applicationContext.getBean(name);  
  }  
   
  /** 
  * 获取类型为requiredType的对象 
  * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException) 
  * @param name       bean注册名 
  * @param requiredType 返回对象类型 
  * @return Object 返回requiredType类型对象 
  * @throws BeansException 
  */  
  public static Object getBean(String name, Class requiredType) throws BeansException {  
    return applicationContext.getBean(name, requiredType);  
  }  
   
  /** 
  * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true  
  * @param name 
  * @return boolean 
  */  
  public static boolean containsBean(String name) {  
    return applicationContext.containsBean(name);  
  }  
   
  /** 
  * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 
  * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)    
  * @param name 
  * @return boolean 
  * @throws NoSuchBeanDefinitionException 
  */  
  public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {  
    return applicationContext.isSingleton(name);  
  }  
   
  /** 
  * @param name 
  * @return Class 注册对象的类型 
  * @throws NoSuchBeanDefinitionException 
  */  
  public static Class getType(String name) throws NoSuchBeanDefinitionException {  
    return applicationContext.getType(name);  
  }  
   
  /** 
  * 如果给定的bean名字在bean定义中有别名,则返回这些别名    
  * @param name 
  * @return 
  * @throws NoSuchBeanDefinitionException 
  */  
  public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {  
    return applicationContext.getAliases(name);  
  }  
}

action调用:

public class UserAction extends BaseAction implements Action,ModelDriven{  
      
    private Users user = new Users();   
 //不用再加载springContext.xml文件,因为在web.xml中配置了,在程序中启动是就有了.      
    UserService userService = (UserService) SpringContextUtil.getBean("userService");  
      
    public String execute() throws Exception {           
        return SUCCESS;  
    }  
   
  public Object getModel() {  
        return user;  
    }       
      
    public String getAllUser(){  
        HttpServletRequest request = ServletActionContext.getRequest();           
        List ls=userService.LoadAllObject( Users.class );  
        request.setAttribute("user",ls);       
        this.setUrl("/yonghu.jsp");  
        return SUCCESS;  
    }  
}

转载于:https://my.oschina.net/v512345/blog/831021

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值