精华内容
下载资源
问答
  • SpringBoot容器获取对象

    千次阅读 2018-08-04 17:05:53
    SpringBoot容器获取对象 代码很简单 @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void ...

    SpringBoot 从容器中获取对象

    代码很简单

    @Component
    public class SpringUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if(SpringUtil.applicationContext == null) {
                SpringUtil.applicationContext = applicationContext;
            }
        }
    
        //获取applicationContext
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        //通过name获取 Bean.
        public static Object getBean(String name){
            return getApplicationContext().getBean(name);
        }
    
        //通过class获取Bean.
        public static <T> T getBean(Class<T> clazz){
            return getApplicationContext().getBean(clazz);
        }
    
        //通过name,以及Clazz返回指定的Bean
        public static <T> T getBean(String name,Class<T> clazz){
            return getApplicationContext().getBean(name, clazz);
        }
    }
    
    展开全文
  • 2.获取容器对象  直接像在spring中获取会NPE异常。需要改装成下面工具类: package cn.qs.utils; import org.springframework.beans.BeansException; import org.springframework.context....

    1.    引入多个properties文件

      很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置

      spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。

      profile的配置文件可以按照application.properties的放置位置一样,放于以下四个位置,

    当前目录的 “/config”的子目录下
    当前目录下
    classpath根目录的“/config”包下
    classpath的根目录下

     

    常见的应用场景

    1.    多环境切换

    在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
      application-dev.properties:开发环境
      application-test.properties:测试环境
      application-prod.properties:生产环境

    我们在总的applications.properties文件中可以通过下面切换:

    spring.profiles.active=dev

     

    2.    我们进行分模块开发的时候如下:

      在dao层的模块中有下面配置:    application-dao.properties

    内容如下:

    ############################################################
    #
    # Mybatis settings
    #
    ############################################################
    #jiazai mybatis peizhiwenjian(**代表任意目录,*代表任意多个字符)
    mybatis.mapper-locations = classpath:mapper/**/*Mapper.xml
    mybatis.config-location = classpath:mybatis/SqlMapConfig.xml
    mybatis.type-aliases-package = cn.qlq.bean
    
    ############################################################
    #
    # datasource settings
    #
    ############################################################
    spring.datasource.driver-class-name= com.mysql.jdbc.Driver
    spring.datasource.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
    spring.datasource.username = root
    spring.datasource.password = 123456

     

    我们在总的applications.properties文件可以通过下面方式引入上面properties文件:

    spring.profiles.active=dao

     

    2.获取容器中对象

      直接像在spring中获取会NPE异常。需要改装成下面工具类:

    package cn.qs.utils;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SpringBootUtils implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            SpringBootUtils.applicationContext = applicationContext;
        }
    
        public static Object getBean(String beanName) {
            return applicationContext.getBean(beanName);
        }
    
        public static <T> T getBean(Class<T> beanClass) {
            return applicationContext.getBean(beanClass);
        }
    
        public static <T> T getBean(String beanName, Class<T> beanClass) {
            return applicationContext.getBean(beanName, beanClass);
        }
    }

    进一步封装成如下工具类:

    package cn.qs.utils;import org.springframework.web.context.ContextLoader;
    import org.springframework.web.context.WebApplicationContext;public class SystemUtils {
        private SystemUtils() {
        }
    public static <T> T getContextBean(Class<T> clazz) {
            WebApplicationContext currentWebApplicationContext = ContextLoader.getCurrentWebApplicationContext();
             T bean = currentWebApplicationContext.getBean(clazz);// 根据类型获取对象
    
            return bean;
        }
    }

     

     

    使用方法:

    UserHealthService userHealthService = SpringBootUtils.getBean(UserHealthService.class);

     

    转载于:https://www.cnblogs.com/qlqwjy/p/10552635.html

    展开全文
  • } } //获取applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } //通过name获取 Bean. public static Object getBean(String name){ return ...
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    
    @Component
    public class SpringUtil implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            
            if(SpringUtil.applicationContext == null) {
                SpringUtil.applicationContext = applicationContext;
            }
        }
    
        //获取applicationContext
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        //通过name获取 Bean. 
        public static Object getBean(String name){
            return getApplicationContext().getBean(name);
        }
    
        //通过class获取Bean.
        public static <T> T getBean(Class<T> clazz){
            return getApplicationContext().getBean(clazz);
        }
    
        //通过name,以及Clazz返回指定的Bean
        public static <T> T getBean(String name,Class<T> clazz){
            return getApplicationContext().getBean(name, clazz);
        }
    

     

    展开全文
  • System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+SpringUtil.applicationContext+"========");...

    @Component

    public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

    if(SpringUtil.applicationContext == null) {

    SpringUtil.applicationContext = applicationContext;

    }

    System.out.println("---------------------------------------------------------------------");

    System.out.println("---------------------------------------------------------------------");

    System.out.println("---------------me.shijunjie.util.SpringUtil------------------------------------------------------");

    System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+SpringUtil.applicationContext+"========");

    System.out.println("---------------------------------------------------------------------");

    }

    //获取applicationContext

    public static ApplicationContext getApplicationContext() {

    return applicationContext;

    }

    //通过name获取 Bean.

    public static Object getBean(String name){

    return getApplicationContext().getBean(name);

    }

    //通过class获取Bean.

    public static <T> T getBean(Class<T> clazz){

    return getApplicationContext().getBean(clazz);

    }

    //通过name,以及Clazz返回指定的Bean

    public static <T> T getBean(String name,Class<T> clazz){

    return getApplicationContext().getBean(name, clazz);

    }

    }

    BeanDefinitionRegistryPostProcessor

    1、作用: 用于动态注册 Bean ,即类没有被纳入 Spring 容器管理。BeanDefinitionRegistryPostProcessor继承自BeanFactoryPostProcessor

    2、可以自定义的注册bean定义的逻辑

    public class CustomBeanDefinitionRegistry implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { RootBeanDefinition helloBean = new RootBeanDefinition(Hello.class); //新增Bean定义 registry.registerBeanDefinition("hello", helloBean); } }

     

     

     

    BeanPostProcessor

    1、作用:在 Spring 容器完成 Bean 的实例化、配置和其他的初始化前后添加一些自己的逻辑处理

    public class MyBeanPostProcessor implements BeanPostProcessor { public MyBeanPostProcessor() { super(); System.out.println("这是BeanPostProcessor实现类构造器!!"); } @Override public Object postProcessAfterInitialization(Object bean, String arg1) throws BeansException { System.out.println("bean处理器:bean创建之后.."); return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String arg1) throws BeansException { System.out.println("bean处理器:bean创建之前.."); return bean; } }

     

    BeanFactoryPostProcessor

    1、作用: 对应 BeanFactory 加载完bean的定义后回调 postProcessBeanFactory()

    public interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; }

     

     

    • 实现了 BeanFactoryAware 接口,可以让 AutowiredAnnotationBeanPostProcessor 获取到当前 Spring 应用程序上下文管理的 BeanFactory,从而可以获取到 BeanFactory 里面所有的 Bean。
    • 实现了 MergedBeanDefinitionPostProcessor 接口,可以让 AutowiredAnnotationBeanPostProcessor 对 BeanFactory 里面的 Bean 在被实例化前对 Bean 定义进行修改。
    • 继承了 InstantiationAwareBeanPostProcessorAdapter,可以让 AutowiredAnnotationBeanPostProcessor 在 Bean 实例化后执行属性设置。

    展开全文
  • 本文通过实例代码给大家详解了springboot获取ioc容器中注入的bean问题,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
  • Springboot项目中如果要获取IOC容器目前有两种方法。 方法一(不实用,不推荐):  在Springboot项目中都会存在一个SpringApplication的启动类,我们通过以下代码启动IOC容器。 其实run方法会将创建的IOC容器...
  • springboot获取Spring容器中的bean

    万次阅读 2018-09-07 17:36:37
    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用spring提供的其他对象或者说...
  • 业务场景:springcloud中的service端中,activity流程中一个流程发起之后...由于这个类没有初始化在spring容器里面进行bean的管理,所以注入service里面的方法注入不进来。这个时候就需要去获取这个具体service在spr...
  • SpringBoot容器管理

    2021-03-13 12:39:22
    SpringBoot使用IOC容器管理:SpringBoot管理对象,把对象注册(放入)到 IOC容器中。 步骤,创建springboot的配置类,在配置类中放 要注册的对象。 要了解如何使用SpringBoot的IOC容器注册对象,先来了解下面几点: ...
  • springboot启动后,如何获取已经放入spring IOC容器的所有bean,不特指springboot,即便没有使用springboot,只使用spring的话,也会有这种功能性的要求的,其实要想获得spring IOC容器里所有的bean,首先要考虑...
  • 下面将介绍基于SpringBoot平台完成ApplicationContext对象获取,并通过实例获取Spring管理的Bean。 (1)创建User(用户信息实体类),并在类上添加@Component注解。 import org.springframework.stereotype....
  • // 获取到同类型的对象都是同一个对象 Book bean = beanFactory.getBean(Book.class); System.out.println(bean); } }     @SpringBootApplication public class App { public static void main( String[] args )...
  • Spring和Springboot容器注入那些事 spring容器如何去存储我们的bean 底层:每一个bean对应了一个BeanDefinition对象,每个bean注册到Map中。如何证明呢? 答案是:使用BeanDefintionMap来存储的所有的bean。 也...
  • SpringBoot容器中添加组件 使用@Configuration+@Bean方法 首先编写一个要加入的组件类,(一般情况在主程序文件夹下兴建Bean文件夹,将组件类存放在其中,我的路径如下com.example.demo.Bean)示例如下: ...
  • 创建springboot 项目 导入springboot aop依赖 <!-- springboot aop 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</...
  • springboot-容器及启动过程

    千次阅读 2018-12-17 18:10:50
    SpringBoot会启动两个容器,即父子容器容器(Spring容器):AnnotationConfigWebApplicationContex 子容器(SpringMVC容器):AnnotationConfigEmbeddedWebApplicationContex 思考几个问题: 问题1:为什么要启动...
  • SpringBoot容器中注册bean时常用注解@Configuration和@Bean@Configuration和@Bean 注解实践创建Dog类创建配置类应用入口类执行结果@Import@Import实践TestConfiguration类中引入Person类项目入口类执行结果@...
  • SpringBoot之启动容器源码分析 1、SpringApplication#run() 由SpringBoot应用引导类的 SpringApplication#run() 进入我们可以看到以下代码 public ConfigurableApplicationContext run(String... args) { ...
  • Springboot容器中添加组件 创建MyConfig类 @Configuration//告诉Springboot这是一个配置类 public class MyConfig { @Bean//给容器中添加组件。 //以方法名作为组件的id。也可以自定义,如@Bean("tom") //返回...
  • 要使用某个对象,只需要从IoC容器获取使用的对象,不需要关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架。 用IoC管理Bean 实验结果 运行testIoC方法,在控制台会输出如下结果 User(id=1, name=...
  • import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.spring.../*在非springboot工厂管理的普通类中,如果要获取工厂管理的对象,我们不能.
  • 重写 ApplicationContextAware 接口里面的...使用 @component注解,将普通JavaBean实例化到spring容器中。 import org.springframework.beans.BeansException; import org.springframework.context.ApplicationConte...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,097
精华内容 13,238
关键字:

springboot获取容器对象

spring 订阅