可以实现选择性的创建Bean操作(Condition就是满足你写的条件(如要加某个maven坐标才创建bean)才创建bean的)
方法1:
@Bean
@Conditional(自定义类),要实现Condition接口的matches方法返回true才创建:
用@ConditionOnClass注解(“放你想要的坐标(条件)(字节码文件名)”),(就是满足了这个条件,才会创建这个类下的所有bean,下面就是演示创建user的bean)
然后条件类上加@Conditional注解
ConditionOnBean就是要满足condition有这个bean才创建有兴趣的童鞋可以详细了解下 Spring Boot 提供的条件注解
@ConditionalOnBean:当容器里有指定 Bean 的条件下
@ConditionalOnMissingBean:当容器里没有指定 Bean 的情况下
@ConditionalOnSingleCandidate:当指定 Bean 在容器中只有一个,或者虽然有多个但是指定首选 Bean
@ConditionalOnClass:当类路径下有指定类的条件下
@ConditionalOnMissingClass:当类路径下没有指定类的条件下
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnResource:类路径是否有指定的值
@ConditionalOnExpression:基于 SpEL 表达式作为判断条件
@ConditionalOnJava:基于 Java 版本作为判断条件
@ConditionalOnJndi:在 JNDI 存在的条件下差在指定的位置
@ConditionalOnNotWebApplication:当前项目不是 Web 项目的条件下
@ConditionalOnWebApplication:当前项目是 Web 项 目的条件下
就是你在pom文件排除tomcat坐标,就可以使用另外3个web服务器了
启动就完事了
import注解见下
com.itheima.config是另一个工程的包,我们这个包直接扫描不到就创建不了对应的bean,可以使用下面的3种方式解决(推荐2,3)
@Import的作用:加载类,这些类都会被Spring创建,并且加入到IOC容器
@SpringbootApplication:
@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
@Configuration:允许在上下文中注册额外的 bean 或导入其他配置类
@ComponentScan: 扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描启动类所在的包下所有的类 ,可以自定义不扫描某些 bean。如下图所示,容器中将排除TypeExcludeFilter和AutoConfigurationExcludeFilter。
@EnableAutoConfiguration 是实现自动装配的重要注解,我们以这个注解入手。
SpringBoot自动配置@EnableAutoConfiguration就是使用了@Import和@Contition而已
总结
Spring Boot 通过@EnableAutoConfiguration开启自动装配,通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配,自动配置类其实就是通过@Conditional按需加载的配置类,想要其生效必须引入spring-boot-starter-xxx包实现起步依赖
参考:https://www.cnblogs.com/javaguide/p/springboot-auto-config.html