软件编程
位置:首页>> 软件编程>> java编程>> Spring中ApplicationContextAware的使用方法详解

Spring中ApplicationContextAware的使用方法详解

作者:霞光里  发布时间:2023-12-25 07:01:33 

标签:Spring,ApplicationContextAware

ApplicationContextAware 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法。

我们在ApplicationContextAware的实现类中,就可以通过这个上下文环境对象得到Spring容器中的Bean。

看到—Aware就知道是干什么的了,就是属性注入的,但是这个ApplicationContextAware的不同地方在于,实现了这个接口的bean,当spring容器初始化的时候,会自动的将ApplicationContext注入进来: 
使用方法如下:

1.实现ApplicationContextAware接口:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import com.co.ayz.rpc.registry.ServiceRegistry;

public class RpcServer implements ApplicationContextAware{

private ApplicationContext context;

@Override
   public void setApplicationContext(ApplicationContext applicationContext)
           throws BeansException {
       // TODO Auto-generated method stub
       context = applicationContext;      
   }  
    //获得applicationContext
   public static ApplicationContext getApplicationContext() {
       //assertContextInjected();
       return context;
   }    
   public static void clearHolder(){
       context=null;
   }
   //获取Bean
   public static <T> T getBean(Class<T> requiredType){
       //assertContextInjected();
       return (T) getApplicationContext().getBean(requiredType);
   }
   @SuppressWarnings("unchecked")
   public static <T> T getBean(String name){
       assertContextInjected();
       return (T) getApplicationContext().getBean(name);
   }    
   //判断application是否为空
   public static void assertContextInjected(){
       Validate.isTrue(context==null, "application未注入 ,请在springContext.xml中注入SpringHolder!");
   }
}

因为我们在做开发的时候,并不是说在每一个地方都能将属性注入到我们想要的地方去的,比如在Utils使用到dao,我们就不能直接注入了,这个时候就是我们需要封装springContext的时候了,而ApplicationContextAware就起了关键性的作用。

自己写的demo:

/**  
* @Title: SpringJobBeanFactory.java
* @Package com.founder.mrp.job
* @Description: TODO
* @version V1.0  
*/

package com.founder.mrp.job;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringJobBeanFactory implements ApplicationContextAware {

private static ApplicationContext applicationContext;

@Override
   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
       SpringJobBeanFactory.applicationContext=applicationContext;

}
    public static ApplicationContext getApplicationContext() {
           return applicationContext;
   }
   @SuppressWarnings("unchecked")
   public static <T> T getBean(String name) throws BeansException {
           if (applicationContext == null){
               return null;
           }
           return (T)applicationContext.getBean(name);
     }
}

使用:
TypeSetErpService typeSetErpServ = SpringJobBeanFactory.getBean("typeSetErpServiceImpl");

来源:https://www.cnblogs.com/loong-hon/p/10917755.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com