首页
学习
活动
专区
圈层
工具
发布

springboot根据不同的条件创建bean,动态创建bean,@Conditional注解使用

这个需求应该也比较常见,在不同的条件下创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思。...倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的bean还是比较麻烦的,可能需要硬编码一些东西做if判断。...新建一个springboot项目,添加一个Configuration标注的类,我们通过不同的条件表达式来创建bean。...,才会实例化一个Bean) @ConditionalOnNotWebApplication(不是web应用) 以上是一些常用的注解,其实就是条件判断,如果为true了就创建Bean,为false就不创建...使用场景还是蛮多的,具体的看情况,但是需要记住有这么个注解,以便不时之需。

9.1K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【小家Spring】控制Spring IoC容器对Bean(含@Configuration配置类)的加载顺序(@DependsOn注解的使用)

    @Order注解等并不能控制Bean的加载顺序的~~因为你如果熟悉原理了就知道Spring在解析Bean的时候,根本就没有参考这个注解 另外@Configuration配置类的加载,也不会受到@Order...因为之前源码解释过,它拿到配置的数组,仅仅就是一个for循环遍历去解析了 另外需要说明的一点是:@Configuration注解的解析顺序,在Spring Boot环境下会受到影响的(毕竟Boot...但如果beanA不直接依赖B,我们如何让B仍先加载? 需要的场景距离如下 bean A 间接(并不是直接@Autowired)依赖 bean B。...需要特别注意的是,使用@DependsOn注解时,一定要注意父子容器的问题(因为它底层也是getBean())。...注解上的使用 由于使用方式很简单,因此略过~ @Configuration配置类顺序控制 @Configuration配置类也是容器里面一个特殊的Bean,因为它不需要完成业务功能,因此它 纯Spring

    3K20

    【Spring注解驱动开发】使用@Import注解给容器中快速导入一个组件

    此时,我们就可以使用@Bean和@Import注解将这些类快速的导入Spring容器中。接下来,我们来一起探讨下如何使用@Import注解给容器中快速导入一个组件。...@Import注解概述 Spring 3.0之前,创建Bean可以通过xml配置文件与扫描特定包下面的类来将类注入到Spring IOC容器内。...我们可以通过@Configuration与@Bean这两个注解配合使用来将原来配置在xml文件里的bean通过java代码的方式进行描述 @Import注解提供了@Bean注解的功能,同时还有xml配置文件里标签组织多个分散的...@Import导入组件的简单示例 没有使用@Import注解的效果 首先,我们创建一个Department类,这个类是一个空类,没有成员变量和方法,如下所示。...,输出Spring容器中所有的bean,来查看是否存在Department类对应的bean实例,以此来判断Spring容器中是否注册有Department类对应的bean实例。

    50610

    在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?

    二、目标 首先我们回顾下这几章节都完成了什么,包括:实现一个容器、定义和注册Bean、实例化Bean,按照是否包含构造函数实现不同的实例化策略,那么在创建对象实例化这我们还缺少什么?...对于属性的填充不只是 int、Long、String,还包括还没有实例化的对象属性,都需要在 Bean 创建时进行填充操作。...另外是填充属性信息还包括了 Bean 的对象类型,也就是需要再定义一个 BeanReference,里面其实就是一个简单的 Bean 名称,在具体的实例化操作时进行递归创建和填充,与 Spring 源码实现一样...BeanReference 时,则需要获取创建 Bean 实例。...到这一章节关于 Bean 的创建操作就开发完成了,接下来需要整个框架的基础上完成资源属性的加载,就是我们需要去动 Xml 配置了,让我们这小框架越来越像 Spring。

    4.5K20

    SpringBootStarter技术:生产就绪与环境配置、实现自定义Starter

    使用到的关键注解和功能的对应关系如下。 ● @Configuration与@Bean的作用:基于Java代码的Bean配置。 ● @Conditional的作用:设置自动配置条件依赖。...配置 下面是自定义Starter的详细配置加载过程,首先使用自动配置AutoConfiguration初始化Bean对象实例,代码如下: 从上面的代码中可以看到@Configuration、@Bean...,这两个注解一起使用可以创建一个基于Java代码的配置类,它可以用来替代加载相应XML配置文件的过程。...@Configuration注解的类可以看作让Spring容器管理的Bean实例的工厂。...Bean参数的获取至此我们已经知道了Bean的配置过程,但是还没有看到SpringBoot是如何读取YAML或者Properites配置文件的属性来创建数据源的,在SagProxyAutoConfiguration

    1.3K10

    【Spring注解驱动开发】不知道什么是懒加载?看这一篇就够了!!

    如果我们需要对某个bean进行延迟加载,我们该如何处理呢?此时,就需要使用到@Lazy注解了。...(获取)bean的时候,创建并使用对象,大家是不是想到了在【设计模式】专题中的单例模式呢?...非懒加载模式 此时,我们将PersonConfig2类的配置修改成单实例bean,如下所示。...IOC容器创建完成 给容器中添加Person.... true 从输出结果中,可以看出使用@Lazy注解标注后,单实例bean对象只是在第一次从Spring容器中获取对象时创建,以后每次获取bean对象时...单例bean是在Spring容器启动的时候加载的,添加@Lazy注解后就会延迟加载,在Spring容器启动的时候并不会加载,而是在第一次使用此bean的时候才会加载,但当你多次获取bean的时候不会重复加载

    52030

    【Spring】IOC容器注解汇总,你想要的都在这儿了!!(文末可留言)

    属性 当我们使用@CompentScan注解进行扫描时,可以使用@CompentScan注解的excludeFilters 属性来排除某些类,如下所示。...Bean的作用域对象 不指定@Scope 在不指定@Scope的情况下,所有的bean都是单实例的bean,而且是饿汉加载(容器启动实例就创建好了) @Bean public Person person...bean 容器启动的时候,不创建对象,在第一次使用的时候才会创建该对象) @Bean @Lazy public Person person() { return new Person(); } @Conditional...} } 针对单实例bean的话,容器启动的时候,bean的对象就创建了,而且容器销毁的时候,也会调用Bean的销毁方法 针对多实例bean的话,容器启动的时候,bean是不会被创建的而是在获取bean...,我们可以通过使用@Qualifier("CustomDao")来指定装配的组件 或者在配置类上的@Bean加上@Primary注解 @Autowired @Qualifier("CustomDao")

    39010

    spring configuration注解原理

    spring既支持xml式配置bean,也可以通过@Configuration注解来配置bean,xml是spring最初支持的方式,随着springboot的出现,通过@Configuration注解来配置...注解工作的核心方法,spring应用启动时所有的被@Configuration注解的类都会被spring cglib库生成cglib动态代理,然后其他地方通过@Autowired注解引入Student类对象就会被生成的...configuration配置类生成的动态代理拦截,处理完后再调用原configuration注解类的student方法获取到Student实例。...Configuration注解类初始化的过程我们知道了,那么在Configuration注解内的@Bean注解的方法又是如何被调用的呢,不着急,下面我们将随着源码的探究揭开这层面纱。...注解方法生成的Bean实例getFactoryMethodName不为null,所以就会通过调用对应的bean方法来创建该Bean实例!

    53620

    【Spring注解驱动开发】深入理解Spring的ImportSelector接口

    写在前面 在前面的文章中,我们知道了可以使用ImportSelector接口实现向Spring容器中导入bean,那ImportSelector接口是如何实现的呢,接下来,我们就一探究竟!...方法之前先调用上述接口中对应的方法,如果需要在所有的@Configuration处理完在导入时可以实现DeferredImportSelector接口。...使用自定义@EnableXXX注解 完成ssm-project工程中的AppConfig配置类 1) 首先我们将刚才的spring.jar导入到ssm-project工程里 2) 在对应的配置类上添加上...spring-project中定义的@EnableSpringStudy注解 @Configuration //表明此类是配置类 @ComponentScan // 扫描自定义的组件(repository...,可以获取ssm-project项目下AppConfig的所有注解,并且能够获取当前BeanFactory所有配置的Bean。

    79710

    【Spring注解开发】使用@Configuration和@Bean向容器中注册组件?看这一篇就够了!!

    在Spring内部,所有的组件都会放到IOC容器中,组件之间的关系通过IOC容器来自动装配,也就是我们所说的依赖注入。接下来,我们就使用注解的方式来完成容器组件的注册、管理及依赖、注入等功能。...在介绍使用注解完成容器组件的注册、管理及依赖、注入等功能之前,我们先来看看使用XML文件是如何注入Bean的。...通过注解注入JavaBean 通过XML文件,我们可以将JavaBean注入到Spring的IOC容器中。那使用注解又该如何实现呢?...@Configuration注解来标注PersonConfig类是一个Spring的配置类,通过@Bean注解将Person类注入到Spring的IOC容器中。...主要我们在类上加上@Configuration注解,并在方法上加上@Bean注解,就能够将方法中创建的JavaBean注入到Spring的IOC容器中。

    52900

    【Spring注解驱动开发】Spring中的InitializingBean和DisposableBean,你真的了解吗?

    写在前面 在《【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!》一文中,我们讲述了如何使用@Bean注解来指定bean初始化和销毁的方法。...具体的用法就是在@Bean注解中使用init-method属性和destroy-method属性来指定初始化方法和销毁方法。...接口,实现afterPropertiesSet方法,或者在配置文件和@Bean注解中通过init-method指定,两种方式可以同时使用。...从输出的结果信息可以看出:单实例bean下,IOC容器创建完成后,会自动调用bean的初始化方法;而在容器销毁前,会自动调用bean的销毁方法。...多实例bean案例 多实例bean的案例代码基本与单实例bean的案例代码相同,只不过在AnimalConfig类中,我们在animal()方法上添加了@Scope("prototype")注解,如下所示

    80410

    小伙伴们在催更Spring系列,于是我汇总了Spring中的各项注解!!

    属性 当我们使用@CompentScan注解进行扫描时,可以使用@CompentScan注解的excludeFilters 属性来排除某些类,如下所示。...Bean的作用域对象 不指定@Scope 在不指定@Scope的情况下,所有的bean都是单实例的bean,而且是饿汉加载(容器启动实例就创建好了) @Bean public Person person...bean 容器启动的时候,不创建对象,在第一次使用的时候才会创建该对象) @Bean @Lazy public Person person() { return new Person(); } @Conditional...} } 针对单实例bean的话,容器启动的时候,bean的对象就创建了,而且容器销毁的时候,也会调用Bean的销毁方法 针对多实例bean的话,容器启动的时候,bean是不会被创建的而是在获取bean...,我们可以通过使用@Qualifier("CustomDao")来指定装配的组件 或者在配置类上的@Bean加上@Primary注解 @Autowired @Qualifier("CustomDao")

    74610

    SpringBoot单元测试:MockMvc的自动配置

    AutoConfigureMockMvc 注解 上节的例子中使用@AutoConfigureMockMvc 注解来引入启动单元测试的自动注入,从而注入 MockMvc 类的 Bean。...可结合上述代码中的注释部分了解对应属性的详细功能。同时,在上节的实例中(也是通常情况下)我们并没有进行特殊的配置,都采用该注解中的默认值。...以 上 功 能 也 就 解 释 了 为 什 么 在 单 元 测 试 中 更 多 的 是 使 用@lmportAuto-Configuration 注解来进行自动配置了。...MockMvcSecurity Configuration 也就是说,当使用@lmportAutoConfiguration 注解,并未指定 classes 属性值时,默认自动配置上述自动配置类。...本章的重点并不仅仅是要教会大家如何使用单元测试,更重要的是传达个思想:单元测试是保证代码质量的重要方式,在具体项目中,如果有可能,请尽量编写单元测试代码。

    2.2K20

    Spring高手之路9——掌握Spring条件装配的秘密武器

    这样就可以根据不同的环境或配置,创建不同的Bean实例,这一特性对于创建可配置和模块化的应用是非常有用的。...在这个阶段,Spring容器会读取所有的配置类,并对配置类中使用了@Bean注解的方法进行解析,然后才会创建并初始化这些bean。  ...被@Bean注解的方法表示了如何实例化、配置和初始化一个新的Bean对象。Spring IoC容器将会负责在适当的时候(在ApplicationContext刷新阶段)调用这些方法,创建Bean实例。...解析@Bean方法:对于每一个@Bean方法,Spring会根据方法的签名、返回类型、以及可能的其他注解(例如@Scope、@Lazy、@Profile等)来决定如何创建和配置对应的Bean。...Spring 在处理 @Configuration 类时,会预先解析所有的 @Bean 方法,收集所有的 Bean 定义信息,然后按照依赖关系对这些 Bean 进行实例化。

    46150

    SpringBoot快速搭建、自动流程进阶、装配机制、功能扩展点详解

    @Configuration是JavaConfig形式的Spring容器的配置类所使用的。...配置加载到当前Spring Boot创建并使用的Spring容器中。...同时借助Spring框架原有的底层工具SpringFactoriesLoader(服务发现机制)和根据特定条件装备Bean的Conditionxxx条件注解实现智能的自动化配置工作。...● @ConditionalOnJava:使用JVM版本作为判断条件来实例化当前Bean。 ● @ConditionalOnJndi:在JNDI存在时查找指定的位置,满足条件时,实例化当前Bean。...标 注 了 @Configuration 注 解 的JavaConfig类汇总并加载到最终的ApplicationContext中,使用条件注解可以在自动化配置过程中定制化Bean的加载过程: ApplicationListener

    1K20
    领券