java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot获取bean实例SpringContextUtil

Springboot获取bean实例之SpringContextUtil详解

作者:stupid child

这篇文章主要介绍了Springboot获取bean实例之SpringContextUtil使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Springboot获取bean实例-SpringContextUtil

1、工具类 SpringContextUtil

package XXXXXXXX;

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

/**
 *
 * 获取spring容器,以访问容器中定义的其他bean
 */
@Component
public class SpringContextUtil implements ApplicationContextAware {

    // Spring应用上下文环境
    private static ApplicationContext applicationContext;

    /**
     * 实现ApplicationContextAware接口的回调方法,设置上下文环境
     *
     * @param applicationContext
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }

    /**
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过name获取对象
     */
    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }

}

2、要注入的bean

package XXXXX;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ShardingVariableConfig {
    @Value("${sharding.data.node}")
    private int dataNode;

    @Value("${sharding.table.node}")
    private int tableNode;
    //获取分库参数
    public int  getDataNode(){
        return this.dataNode;
    }
    //获取分表参数
    public int  getTableNode(){
        return this.tableNode;
    }
}

3、yml配置

4、方法中调用

 ShardingVariableConfig valueService = (ShardingVariableConfig) SpringContextUtil.getBean("shardingVariableConfig");//bean的名称
        int dataNode = valueService.getDataNode();

注意事项:

工具类SpringContextUtil和JavaBean都要加注解@Component,否则会Spring无法扫描到二者的位置

总结

通过此方法可以在任何地方调用JavaBean,解决@Autowired或@Resource无法注入的问题,无法直接通过@Value在某些类中取到值问题

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文