这个需求应该也比较常见,在不同的条件下创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思。...倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的bean还是比较麻烦的,可能需要硬编码一些东西做if判断。...新建一个springboot项目,添加一个Configuration标注的类,我们通过不同的条件表达式来创建bean。...,才会实例化一个Bean) @ConditionalOnNotWebApplication(不是web应用) 以上是一些常用的注解,其实就是条件判断,如果为true了就创建Bean,为false就不创建...使用场景还是蛮多的,具体的看情况,但是需要记住有这么个注解,以便不时之需。
首先需要在Spring配置文件中增加如下配置: 然后可以用@Component、@Controller...、@Service、@Repository注解来标注需要由Spring IoC容器进行对象托管的类。...这几个注解没有本质区别,只不过@Controller通常用于控制器,@Service通常用于业务逻辑类,@Repository通常用于仓储类(例如我们的DAO实现类),普通的类用@Component来标注
@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
此时,我们就可以使用@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实例。
二、目标 首先我们回顾下这几章节都完成了什么,包括:实现一个容器、定义和注册Bean、实例化Bean,按照是否包含构造函数实现不同的实例化策略,那么在创建对象实例化这我们还缺少什么?...对于属性的填充不只是 int、Long、String,还包括还没有实例化的对象属性,都需要在 Bean 创建时进行填充操作。...另外是填充属性信息还包括了 Bean 的对象类型,也就是需要再定义一个 BeanReference,里面其实就是一个简单的 Bean 名称,在具体的实例化操作时进行递归创建和填充,与 Spring 源码实现一样...BeanReference 时,则需要获取创建 Bean 实例。...到这一章节关于 Bean 的创建操作就开发完成了,接下来需要整个框架的基础上完成资源属性的加载,就是我们需要去动 Xml 配置了,让我们这小框架越来越像 Spring。
使用到的关键注解和功能的对应关系如下。 ● @Configuration与@Bean的作用:基于Java代码的Bean配置。 ● @Conditional的作用:设置自动配置条件依赖。...配置 下面是自定义Starter的详细配置加载过程,首先使用自动配置AutoConfiguration初始化Bean对象实例,代码如下: 从上面的代码中可以看到@Configuration、@Bean...,这两个注解一起使用可以创建一个基于Java代码的配置类,它可以用来替代加载相应XML配置文件的过程。...@Configuration注解的类可以看作让Spring容器管理的Bean实例的工厂。...Bean参数的获取至此我们已经知道了Bean的配置过程,但是还没有看到SpringBoot是如何读取YAML或者Properites配置文件的属性来创建数据源的,在SagProxyAutoConfiguration
@ConditionalOnBean 注解指定需要在容器中存在 javax.jms.ConnectionFactory 的 Bean 对象时才会被实例化。...以 ActiveMQ 为例,Active-MQ 的自动配置会在 JmsAutoConfiguration 配置之前执行,并在其内部创建Connection-Factory 实现类的 Bean 对象。...其他消息框架也与此类似,至于是如何初始化的,后面关于 ActiveMQ 的自动配置的部分我们会进行详解。...JmsTemplate 实例使用的默认Destina-tionResolver 实现 DynamicDestinationResolver 类。...通过@lmport 注解引入了上面井到的 Jms TemplateConfiguration 配置类, 为了确保 Jms Template 的实例化,创建、JmsMessagingTemplate 时将
在了解了 Spring Cache 的基本作用的和定义之后,下面来看在 SpringBoot 中是如何对Cache 进行自动配置的。...,其实是导入符合条件的 Spring Cache 使用的各类基础缓存框架(或组件)的配置。...( 注解@Configuration 的类)。...,@ConditionalOnBean 指定当 Cache 的 Bean存在时进行实例化操作,@ConditionalOnMissingBean 指定当 CacheManager 的 Bean 不存在时进行实例化操作...Bean,该 Bean用于确保容器中存在一个 CacheManager 对象, 以达到缓存机制可以继续被配置和使用的目的,同时该 Bean 也用来提供有意义的异常声明。
如果我们需要对某个bean进行延迟加载,我们该如何处理呢?此时,就需要使用到@Lazy注解了。...(获取)bean的时候,创建并使用对象,大家是不是想到了在【设计模式】专题中的单例模式呢?...非懒加载模式 此时,我们将PersonConfig2类的配置修改成单实例bean,如下所示。...IOC容器创建完成 给容器中添加Person.... true 从输出结果中,可以看出使用@Lazy注解标注后,单实例bean对象只是在第一次从Spring容器中获取对象时创建,以后每次获取bean对象时...单例bean是在Spring容器启动的时候加载的,添加@Lazy注解后就会延迟加载,在Spring容器启动的时候并不会加载,而是在第一次使用此bean的时候才会加载,但当你多次获取bean的时候不会重复加载
属性 当我们使用@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")
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实例!
写在前面 在前面的文章中,我们知道了可以使用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。
写在前面 在上一篇关于Spring的@Import注解的文章《【Spring注解驱动开发】使用@Import注解给容器中快速导入一个组件》中,我们简单介绍了如何使用@Import注解给容器中快速导入一个组件...,在SpringBoot的自动化配置和@EnableXXX(功能性注解)都有它的存在。...方法之前先调用上述接口中对应的方法,如果需要在所有的@Configuration处理完在导入时可以实现DeferredImportSelector接口。...ImportSelector接口实例 首先,我们创建一个MyImportSelector类实现ImportSelector接口,如下所示。...我们继承创建两个Java bean对象,分别为User和Role,如下所示。
在Spring内部,所有的组件都会放到IOC容器中,组件之间的关系通过IOC容器来自动装配,也就是我们所说的依赖注入。接下来,我们就使用注解的方式来完成容器组件的注册、管理及依赖、注入等功能。...在介绍使用注解完成容器组件的注册、管理及依赖、注入等功能之前,我们先来看看使用XML文件是如何注入Bean的。...通过注解注入JavaBean 通过XML文件,我们可以将JavaBean注入到Spring的IOC容器中。那使用注解又该如何实现呢?...@Configuration注解来标注PersonConfig类是一个Spring的配置类,通过@Bean注解将Person类注入到Spring的IOC容器中。...主要我们在类上加上@Configuration注解,并在方法上加上@Bean注解,就能够将方法中创建的JavaBean注入到Spring的IOC容器中。
写在前面 在《【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!》一文中,我们讲述了如何使用@Bean注解来指定bean初始化和销毁的方法。...具体的用法就是在@Bean注解中使用init-method属性和destroy-method属性来指定初始化方法和销毁方法。...接口,实现afterPropertiesSet方法,或者在配置文件和@Bean注解中通过init-method指定,两种方式可以同时使用。...从输出的结果信息可以看出:单实例bean下,IOC容器创建完成后,会自动调用bean的初始化方法;而在容器销毁前,会自动调用bean的销毁方法。...多实例bean案例 多实例bean的案例代码基本与单实例bean的案例代码相同,只不过在AnimalConfig类中,我们在animal()方法上添加了@Scope("prototype")注解,如下所示
AutoConfigureMockMvc 注解 上节的例子中使用@AutoConfigureMockMvc 注解来引入启动单元测试的自动注入,从而注入 MockMvc 类的 Bean。...可结合上述代码中的注释部分了解对应属性的详细功能。同时,在上节的实例中(也是通常情况下)我们并没有进行特殊的配置,都采用该注解中的默认值。...以 上 功 能 也 就 解 释 了 为 什 么 在 单 元 测 试 中 更 多 的 是 使 用@lmportAuto-Configuration 注解来进行自动配置了。...MockMvcSecurity Configuration 也就是说,当使用@lmportAutoConfiguration 注解,并未指定 classes 属性值时,默认自动配置上述自动配置类。...本章的重点并不仅仅是要教会大家如何使用单元测试,更重要的是传达个思想:单元测试是保证代码质量的重要方式,在具体项目中,如果有可能,请尽量编写单元测试代码。
这样就可以根据不同的环境或配置,创建不同的Bean实例,这一特性对于创建可配置和模块化的应用是非常有用的。...在这个阶段,Spring容器会读取所有的配置类,并对配置类中使用了@Bean注解的方法进行解析,然后才会创建并初始化这些bean。 ...被@Bean注解的方法表示了如何实例化、配置和初始化一个新的Bean对象。Spring IoC容器将会负责在适当的时候(在ApplicationContext刷新阶段)调用这些方法,创建Bean实例。...解析@Bean方法:对于每一个@Bean方法,Spring会根据方法的签名、返回类型、以及可能的其他注解(例如@Scope、@Lazy、@Profile等)来决定如何创建和配置对应的Bean。...Spring 在处理 @Configuration 类时,会预先解析所有的 @Bean 方法,收集所有的 Bean 定义信息,然后按照依赖关系对这些 Bean 进行实例化。
@Configuration是JavaConfig形式的Spring容器的配置类所使用的。...配置加载到当前Spring Boot创建并使用的Spring容器中。...同时借助Spring框架原有的底层工具SpringFactoriesLoader(服务发现机制)和根据特定条件装备Bean的Conditionxxx条件注解实现智能的自动化配置工作。...● @ConditionalOnJava:使用JVM版本作为判断条件来实例化当前Bean。 ● @ConditionalOnJndi:在JNDI存在时查找指定的位置,满足条件时,实例化当前Bean。...标 注 了 @Configuration 注 解 的JavaConfig类汇总并加载到最终的ApplicationContext中,使用条件注解可以在自动化配置过程中定制化Bean的加载过程: ApplicationListener
是如何帮我们完成这些bean的配置的?...熟悉@Configuration&、@Bean这两个bean的同学或许已经知道了。这两个注解一起使用就可以创建一个基于java代码的配置类,可以用来替代相应的xml配置文件。...@Configuration注解的类可以看作是能生产让Spring IoC容器管理的Bean实例的工厂。...这些是springboot特有的,常见的条件依赖注解有: @ConditionalOnBean,仅在当前上下文中存在某个bean时,才会实例化这个Bean。...bean参数获取 到此我们已经知道了bean的配置过程,但是还没有看到springboot是如何读取yml或者properites配置文件的的属性来创建数据源的?