首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

这个需求应该也比较常见,在不同的条件下创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思。...倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的bean还是比较麻烦的,可能需要硬编码一些东西做if判断。...新建一个springboot项目,添加一个Configuration标注的类,我们通过不同的条件表达式来创建bean。...Bean) @ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean) @ConditionalOnMissingClass(某个class类路径上不存在的时候...可能上面的那些你用的地方不常见,那我来举一个我正在使用的例子。

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

    Spring: Bean的创建原理解析

    这样,一个Bean就创建完了,如果当前Bean是单例Bean,那么会把该Bean对象存入一个Map,Map的key为beanName,value为Bean对象。...这样下次getBean时就可 以直接从Map中拿到对应的Bean对象了。...(实际上,在Spring源码中,这个Map就 是单例池) 如果当前Bean是原型Bean,那么后续没有其他动作,不会存入一个Map,下次 getBean时会再次执行上述创建过程,得到一个新的Bean对象...1.AOP代理对象生成 AOP就是进行动态代理,在创建一个Bean的过程中,Spring在最后一步会去判断当前正在 创建的这个Bean是不是需要进行AOP,如果需要则会进行动态代理。...Spring事务的代理对象执行某个方法时的步骤: 1.判断当前执行的方法是否存在@Transactional注解 2.如果存在,则利用事务管理器(TransactionMananger)新建一个数据库连接

    23410

    spring中bean的细节 三种创建bean对象的方法 bean作用范围 bean对象的生命周期

    spring中bean的细节 一、之三种创建bean对象的方法 把对象的创建交给spring来管理 时的唯一标志,class反射要创建的全限定类名--> bean id="accountService" class="bruce.service.impl.AccountServiceImpl...">bean> 第二种方式:使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器 模拟一个工厂类(该类可能时存在于jar包中的,我们无法通过修改源码的方式来提供默认构造函数...,他是一个工厂有方法可以给我们创建对象 我们需要定义一个service对象,我们以后需要取出来,这个对象时由instanceFactory这个工厂的getAccount方法创建的 第三种方式:使用工厂中的静态方法创建对象...,一份到用户表单上,一份是到服务器的session域中 点击登录后,发送第二次请求,再次请求的时候有可能原来空闲的机器满负荷了,另一个满负荷的变成空闲的,但是第一次请求的session域是在1号机器开辟的

    1.3K30

    Spring创建bean的三种方式

    bean则可以使用@Component注解来实现,该注解可以传一个参数value,用来指定要创建的bean的名称,默认使用类名并且首字母小写。...这种方式创建bean则不需要进行组件扫描了,其是通过在配置类中通过方法显示的创建一个bean,该方法则需要使用@Bean注解进行标识。...} } 上面的代码中,在创建CDPlayer类型的bean时会调用一次sgtPeppers()方法,而在创建CompactDisc类型的bean时也会调用一次该方法,这样会造成Spring...id用来指定要声明的bean的名称,如果没指定则创建的bean的默认名称为class属性的值加上#数字,class属性则是用来指定要创建的类(包含包名)的。...bean的三种方式的介绍,可以看出,使用xml进行显示的配置这种方式比较复杂,而且因为其使用的是字符串,这不是类型安全的,使用JavaConfig则只能创建少量的bean,但是其可以为第三方库的类创建bean

    4K10

    BeanPostProcessor 是在何时介入 Bean 创建的?

    其实主要是对已经创建出来的 Bean 做一些后置处理,而 BeanFactoryPostProcessor 主要是针对 BeanDefinition 做后置处理(此时 Bean 对象还没创建出来)。...) throws BeansException { return bean; } } 这里就是两个方法,理解这两个方法有一个大的前提,就是此时 Spring 容器已经通过 Java 反射创建出来...MergedBeanDefinitionPostProcessor 介入的时机就是 Bean 创建成功之后,Bean 中各个属性填充之前。...它的作用是允许开发者在 Bean 定义合并完成后,对合并后的 Bean 进行自定义的修改或扩展操作。...在创建 Bean 的关键方法 AbstractAutowireCapableBeanFactory#doCreateBean 中,有这样几个关键步骤: protected Object doCreateBean

    27930

    Spring5参考指南:Bean的创建

    Spring容器中的Bean Bean在Spring中就是一个业务组件,我们通过创建各种Bean来完成最终的业务逻辑功能。...Bean的实例化 实例化bean一般有3种方式,通过构造函数实例化,通过静态工程方法实例化,通过实例的工厂方法实例化。 一般来说我们使用构造函数在Spring容器中创建bean。...ref="accountDao"/> bean> 静态工厂方法 静态工厂方法通过class属性指定包含静态工厂方法的类,使用名为factory-method的属性指定工厂方法本身的名称。...实例工厂方法 和静态工厂方法一样,实例工厂方法只不过是使用实例中的方法来创建相应的bean对象。...这样在factory-bean定义工厂bean实例,在factory-method中定义需要创建bean的方法: <!

    24310

    Spring5参考指南:Bean的创建

    Spring容器中的Bean Bean在Spring中就是一个业务组件,我们通过创建各种Bean来完成最终的业务逻辑功能。...Bean的实例化 实例化bean一般有3种方式,通过构造函数实例化,通过静态工程方法实例化,通过实例的工厂方法实例化。 一般来说我们使用构造函数在Spring容器中创建bean。...ref="accountDao"/> bean> 静态工厂方法 静态工厂方法通过class属性指定包含静态工厂方法的类,使用名为factory-method的属性指定工厂方法本身的名称。...实例工厂方法 和静态工厂方法一样,实例工厂方法只不过是使用实例中的方法来创建相应的bean对象。...这样在factory-bean定义工厂bean实例,在factory-method中定义需要创建bean的方法: <!

    54510

    Spring bean到底是如何创建的?(下)

    本文是接着上篇文章 Spring bean到底是如何创建的?(上) 来继续讲述spring bean的其它的生命周期。...前文回顾: 上篇文章最开始我简单介绍了spring ioc和aop的概念,随后讲述了spring bean创建源码分析的一部分,包括bean元信息、不同作用域bean的创建方式、bean的后置处理器BeanPostProcessor...八、Spring Bean销毁阶段 这个阶段不属于bean的创建阶段,你平时使用的bean在上一个阶段就完完全全创建好了,这个阶段是在spring容器关闭的时候才会执行。...九、全文总结 到这里整个spring bean生命周期源码分析就完全讲完了,包括了bean创建和销毁,其实bean的生命周期说白了就是在bean创建和销毁的不同阶段进行BeanPostProcessor...组件方法的回调来达到对于bean的创建或销毁过程扩展的目的。

    39620

    Spring bean到底是如何创建的?(上)

    bean的生成过程,也就是本文的主题,spring bean的创建流程。...假设A正在创建,他在创建的实话会去往第一级缓存注册一个 ObjectFactory , 然后在属性赋值(后面会说的)阶段注入了B , 此时B 要按照Bean创建的流程进行创建,跟A一样注册一个 OjbectFactory...(B的注册不重要,我是为了让大家清楚跟A创建流程一样),当B在属性赋值阶段的时候要注入A,此时会发现,A正在创建,于是乎他就会从 singletonFactories 拿出A的ObjectFactory...接着我们顺着创建单例bean继续往下看,把创建单例bean的重要的每个环节都看一遍,从这我们就开始深入bean的生命周期源码阶段。...接下来我们选择了深入单例bean的创建源码,进入了bean创建的生命周期创建阶段,bean class 的加载,bean的实例化阶段,详细分为实例化之前阶段、实例化阶段、实例化之后阶段,顺便插入了对BeanPostProcessor

    40010

    Spring 手动创建 bean 的两种方式

    ,都一一对应了我们平常配置一个 bean 时可以提供的配置,这里就不一一赘述了。...4.2 通过 BeanDefinition 创建自定义 bean 通过 BeanDefinition 创建 bean 的方式与我们平常通过 xml 的方式创建 bean 几乎没有什么差别,所有 xml...比如,如果我们使用 Spring 提供的 ApplicationContext.getBeansOfType() 方法来获取指定类型的 bean 时,spring 会尝试将所有该类型的 bean 全部实例化后返回回来...当我们执行 ApplicationContext.getBeansOfType() 时,Spring 回去寻找上下文中所有匹配参数类型的 bean,但如果 bean 需要被工厂方法创建,那么,Spring...BeanFactory 提前创建并实例化它所要创建的 bean,而这个 bean 是否需要依赖其他 bean 或配置的注入,我们就更无从得知了,这是一个很大的隐患。

    2.7K30

    idea 创建的maven+spring+mybatis项目整合 报错无法创建bean

    最近在做一个由maven构建的spring+spring mvc+mybatis项目,刚开始的时候是用自己的电脑Win10环境下的eclipse写的,托管到了码svn上面,刚开始什么问题都没有 同学用的是...,各种看着一脸懵逼的报错信息(idea的tomcat运行日志文件很不好找,找了好久)辛辛苦苦弄了一周左右,期间经历了把项目删了又建,然后自己搭环境等各种坑爹的环节,一开始报错信息千奇百怪,在弄了这么久之后大概就稳定成了如下的样子...: mybatis.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException... resource [com/scpchome/dao/mapping/] cannot be resolved to URL because it does not exist   一直是不能创建...bean的样子,经过一行一行地阅读报错信息。。

    2K60

    idea 创建的maven+spring+mybatis项目整合 报错无法创建bean

    最近在做一个由maven构建的spring+spring mvc+mybatis项目,刚开始的时候是用自己的电脑Win10环境下的eclipse写的,托管到了码svn上面,刚开始什么问题都没有 同学用的是...,各种看着一脸懵逼的报错信息(idea的tomcat运行日志文件很不好找,找了好久)辛辛苦苦弄了一周左右,期间经历了把项目删了又建,然后自己搭环境等各种坑爹的环节,一开始报错信息千奇百怪,在弄了这么久之后大概就稳定成了如下的样子...: mybatis.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException...path resource [com/scpchome/dao/mapping/] cannot be resolved to URL because it does not exist   一直是不能创建...bean的样子,经过一行一行地阅读报错信息。。

    1.3K80

    idea 创建的maven+spring+mybatis项目整合 报错无法创建bean

    最近在做一个由maven构建的spring+spring mvc+mybatis项目,刚开始的时候是用自己的电脑Win10环境下的eclipse写的,托管到了码svn上面,刚开始什么问题都没有 同学用的是...,各种看着一脸懵逼的报错信息(idea的tomcat运行日志文件很不好找,找了好久)辛辛苦苦弄了一周左右,期间经历了把项目删了又建,然后自己搭环境等各种坑爹的环节,一开始报错信息千奇百怪,在弄了这么久之后大概就稳定成了如下的样子...: mybatis.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException...path resource [com/scpchome/dao/mapping/] cannot be resolved to URL because it does not exist   一直是不能创建...bean的样子,经过一行一行地阅读报错信息。。

    94020
    领券