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在某些类中取到值问题

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 获取Bean的方式可以有多种,包括使用@Autowired、@Resource、@Inject和利用ApplicationContext等。其中,@Autowired和@Resource适用于自动装配Bean,@Inject适用于使用JSR-330规范的依赖注入,而ApplicationContext则可以手动获取Bean对象。具体使用哪种方式获取Bean,要根据具体的场景和需求来确定。 ### 回答2: Spring Boot是基于Spring框架的一种简化开发的方式,其中获取Bean是Spring Boot中最基本的操作之一。获取Bean的方式有以下几种: 1.注解方式Spring Boot优先使用注解方式获取Bean,在类或方法上使用注解进行声明即可,例如:@Component、@Service、@Controller、@Repository等注解。 2.编程式方式:在Java代码中使用@Autowired、@Resource、@Inject等注解来获取Bean。 3.XML配置方式:使用XML配置文件中的<context:component-scan>等标签来自动扫描Bean,实现自动注入。 4.Java配置方式:使用@Configuration、@Bean、@Import等注解,通过@Configuration注解标记配置类,通过@Bean方法获取Bean实例,通过@Import注解导入Bean。 比较推荐的获取Bean的方式是注解方式,因为其简洁明了,并且可以自动扫描和注入Bean,有效地提高了开发效率。而对于一些特殊的Bean,可以使用编程式或XML配置方式获取。总之,在Spring Boot中获取Bean的方式非常灵活,开发者可以根据具体情况选择最适合自己的方式来进行获取。 ### 回答3: SpringBootSpring框架的变种,它在Spring的基础上集成了很多常用的功能和依赖,并采用了“约定大于配置”的原则来简化配置。在SpringBoot中,获取Bean的方式Spring基本上是一样的。下面是具体的方法: 1. 自动装配 SpringBoot中最常用的获取Bean的方式就是自动装配。通过在类上添加@Bean注解,就可以将该类装配成为一个Bean,并交由Spring容器进行管理。例如: ``` @Configuration public class MyConfig { @Bean public MyBean myBean(){ return new MyBean(); } } ``` 在其他的类中,只需要使用@Autowired注解即可自动注入该Bean: ``` @Service public class MyService { @Autowired private MyBean myBean; ... } ``` 2. 手动注册 除了自动装配,还可以手动注册Bean。使用注解@ImportResource或者@Import,将其他配置类中的Bean导入到当前类中,即可获取Bean。例如: ``` @Configuration @Import(MyConfig.class) public class AppConfig { } ``` 在这个类中就可以使用@Autowired将MyBean注入到需要的类中。 3. 使用ApplicationContext获取SpringBoot中,可以使用ApplicationContext获取Bean。只需要在需要的类中添加@Autowired注解,将ApplicationContext注入进来,然后就可以使用getBean方法获取Bean了。例如: ``` @Service public class MyService { @Autowired private ApplicationContext context; public void doSomething(){ MyBean myBean = context.getBean(MyBean.class); ... } } ``` 4. 使用@Qualifier注解 如果有多个类型相同的Bean的话,可以使用@Qualifier注解来指定需要的Bean。例如: ``` @Service public class MyService { @Autowired @Qualifier("myBean1") private MyBean myBean; ... } ``` 以上就是SpringBoot获取Bean的方式,通过自动装配、手动注册、使用ApplicationContext和使用@Qualifier注解等方式,可以方便的获取Bean,并进行依赖注入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值