首页 > 其他分享 >Springcloud学习笔记52--通过ApplicationContextAware接口从spring上下文中获取到需要的bean(获取spring托管的Bean)

Springcloud学习笔记52--通过ApplicationContextAware接口从spring上下文中获取到需要的bean(获取spring托管的Bean)

时间:2022-11-22 11:02:16浏览次数:41  
标签:ApplicationContextAware applicationContext spring getBean 获取 bean public

1.背景

在spring项目中,bean之间的依赖关系是 spring容器自动管理的,但是一个项目中有些类不在spring容器中却需要使用spring管理的bean,这时候不能通过正常的方式(注解等方式)注入bean,在spring中提供了ApplicationContextAware接口,通过ApplicationContextAware接口可以获取到spring上下文,从而从spring上下文中获取到需要的bean。

2.SpringUtils.java

我们可以编写一个工具类来实现ApplicationContextAware,通过工具类来获取我们需要的bean在spring容器外的类调用bean的方法,具体代码如下:

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

//此处使用注解的方式把工具类加入到容器中,可以使用xml,配置类等方式,必须要加入到容器中
@Component
public class SpringUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;  
  //此方法是父类ApplicationContextAware 中的方法 重写
    @Override  
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
        if(SpringUtils.applicationContext == null){  
            SpringUtils.applicationContext  = applicationContext;  
        } 
    } 
    
    public static ApplicationContext getApplicationContext() {  
       return applicationContext;  
    }    
    public static Object getBean(String name){  
       return getApplicationContext().getBean(name);  
    }  
    public static <T> T getBean(Class<T> clazz){  
       return getApplicationContext().getBean(clazz);  
    }  
   public static <T> T getBean(String name,Class<T> clazz){  
       return getApplicationContext().getBean(name, clazz);  
    }
}

容器外类 TestAppContext.java

public class TestAppContext{
    //因为Person是容器中的bean TestAppContext不受spring容器管理 所以
    //这里不能通过正常的方式注入
    private Person person;
    public String getPersonName(){
        //通过bean的名称来获取bean
        person = (Person)SpringUtils.getBean("person");
        person2 = (Person)SpringUtils.getBean(Person.class);
        return person.getName(); } 
}

参考文献:https://blog.csdn.net/qq_28070019/article/details/83624380

标签:ApplicationContextAware,applicationContext,spring,getBean,获取,bean,public
From: https://www.cnblogs.com/luckyplj/p/16914405.html

相关文章

  • ajax 获取响应标头中的参数
    今天在写JWT续期的操作时,后端返回了新的JWT在响应标头中,前端就是拿不到,xhr.getResponseHeader里面一直为空,好在解决了,记录一下前后端分离的项目中,出现了跨域问题,所以......
  • java mybatis查询数据库获取树形结构数据
    数据库数据,每条数据都有code和parent_code,最顶级的parent_code为1实体类importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatispl......
  • 关于如何使没有外置网卡的工控机等电脑获取外网
    "终于有空写博客了555"首先,在没有外置网卡等环境的前提下,一般手里都会有一台可以通过wifi连接外网的笔记本,通过设置wifi,即笔记本电脑上的wifi适配器,打开设置属性里的共享,......
  • .NET C#获取当前网页地址信息
    .NETC#获取当前网页地址信息.NETC#获取当前网页地址信息.NETC#获取当前网页地址信息设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli"http:......
  • 获取局域网或者公网ip
    获取局域网ipimportsocketdefget_host_ip():s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)try:s.connect(('8.8.8.8',......
  • 基于Spring-AOP的自定义分片工具
    作者:陈昌浩1背景随着数据量的增长,发现系统在与其他系统交互时,批量接口会出现超时现象,发现原批量接口在实现时,没有做分片处理,当数据过大时或超过其他系统阈值时,就会出现......
  • 静态变量使用@Value获取不到值,应该如何解决
    @Slf4j@ConfigurationpublicclassGatewayRoutersConfiguration{publicstaticfinallongDEFAULT_TIMEOUT=30000;publicstaticStringSERVER_ADDR;......
  • 获取当前时间的前一天 后一天 一周后
    created(){ //取前一天时间 letreTime=this.getDay(-1,7200000); //转化为毫秒 letjugdeTime=Date.parse(reTime); console.log('昨天:',this.getDay(-......
  • C#通过注册表获取电脑的可用COM串口列表
    C#获取串口列表//usingMicrosoft.Win32;publicvoidGetComList(){RegistryKeykeyCom=Registry.LocalMachine.OpenSubKey("Ha......
  • Spring MVC之Converter类型转换器
    SpringMVC框架的Converter<S,T>是一个可以将一种数据类型转换成另一种数据类型的接口,这里S表示源类型,T表示目标类型。开发者在实际应用中使用框架内置的类型转换器基......