条件注解@Conditional
可以基于条件去创建一个Bean,根据满足某一特定条件创建一个特定的Bean
比如 当某一个jar包在一个类路径下的时候 自动配置一个或者多个bean
或者只有某个Bean被创建的时候才创建另外一个Bean ;就是根据特定的条件控制创建
Bean的行为。
//实现condition接口 ,重写match方法
public class WindowsConditonal implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().getProperty("os.name").contains("Windows");
}
}
public class MacConditional implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().getProperty("os.name").contains("Mac");
}
}
public interface ListService {
void showComand();
}
public class WindowsListServiceImpl implements ListService{
@Override
public void showComand() {
System.out.println("windows : dir");
}
}
public class MacListServiceImpl implements ListService {
@Override
public void showComand() {
System.out.println("mac : ls");
}
}
@Configuration
public class ConditionalConfig {
@Bean
@Conditional(WindowsConditonal.class)
public ListService winListService(){
return new WindowsListServiceImpl();
}
@Bean
@Conditional(MacConditional.class)
public ListService macListService(){
return new MacListServiceImpl();
}
public static void main(String[] args){
AnnotationConfigApplicationContext atx =
new AnnotationConfigApplicationContext(ConditionalConfig.class);
ListService listService = atx.getBean(ListService.class);
listService.showComand();
}
}
- 大小: 147.7 KB
分享到:
相关推荐
`@TypeDiscriminator` 和 `@JsonTypeInfo` 这两个注解分别来自Spring和Jackson库,它们用于解决序列化和反序列化过程中多态对象的处理问题。 首先,`@TypeDiscriminator` 是Spring Data JPA提供的一种注解,用于在...
Java @PostConstruct 和 @PreConstruct 注解详解 Java 中的 @PostConstruct 和 @PreConstruct 注解是从 Java EE5 规范开始引入的,它们是用来修饰 Servlet 生命周期的两个重要的注解。下面将详细介绍这两个注解的...
Mybatis-Plus 中乐观锁 @version 注解的问题与解决方案 Mybatis-Plus 是一个基于 Mybatis 的增强工具,它提供了许多实用的功能来简化数据库交互操作。在实际开发中,我们经常会遇到乐观锁的问题,特别是在使用 @...
Spring Framework 中@Configuration 注解的重要性 @Configuration 注解是 Spring Framework 中的一个重要组件,它用于标注配置类,告诉 Spring Framework 如何处理 Bean 的创建和管理。在本文中,我们将深入探讨为...
`@Autowired`和`@Bean`是两个关键注解,它们在实现DI时起着重要作用。让我们深入探讨这两个注解的工作原理,以及它们在注入bean时的顺序。 `@Autowired`注解由Spring提供,用于自动装配bean的依赖。当我们在字段、...
Spring Boot 中的 @ConditionalOnBean 注解 @ConditionalOnBean 注解是 Spring Boot 中的一种条件注解,用于判断 Bean 是否存在于容器中。该注解可以用在类或方法上,用于控制 Bean 的生命周期。 @...
@Import 注解是 Spring 框架中的一种重要注解,主要用于导入@Configuration 注解的配置类、声明@Bean 注解的 bean 方法、导入 ImportSelector 的实现类或导入 ImportBeanDefinitionRegistrar 的实现类。本篇文章将...
本教程将详细介绍如何在Spring Boot项目中整合MyBatis,并使用@Select注解来实现数据库查询。 首先,我们需要在Spring Boot项目中引入MyBatis的依赖。在`pom.xml`文件中添加如下依赖: ```xml <groupId>org....
在Spring3.1以后增加了一项happy的技术点,就是基于注解来实现缓存的技术。他的本质上不是具体的缓存方案实现,而是一个对缓存的抽象,让我们通过注解,实现少量的代码,达到实现缓存的方案。 Cacheable的说明 @...
Spring Boot 使用 @Data 注解减少不必要代码 概述: 在 Spring Boot 项目中,我们经常需要编写实体类来存储和传输数据。在传统的编程方式中,我们需要手动编写 setter 和 getter 方法来完成数据的存取操作。然而,...
Spring @Bean 注解配置及使用方法解析 @Bean 注解是 Spring 框架中用于生成 Bean 实例的注解,主要用在方法上,声明当前方法体中包含了最终产生 Bean 实例的逻辑。该注解可以与 @Component 或 @Configuration 一起...
试一试
使用 @Qualifier 注解是解决 Spring 中多个同类型 Bean 注入冲突的一种常见方法。当我们在 Spring 容器中存在多个同一接口或父类的实现时,如果不明确指定要注入哪个实现,Spring 就会抛出 "Consider marking one of...
在Spring Boot中,@ComponentScan注解是一个关键特性,它负责控制Spring容器的组件扫描行为。本文将详细探讨@ComponentScan注解的作用、工作原理以及如何使用它来优化Spring Boot应用程序的组件管理。 @...
在Java Spring框架中,`@Conditional`注解是实现条件化bean注入的关键工具。这个注解允许我们在配置bean时设置一些条件,只有当这些条件满足时,对应的bean才会被Spring容器实例化并注入到应用程序中。这样的设计极...
Spring AOP 实例(AOP 如此简单)@Aspect、@Around 注解方式配置 Spring AOP 是 Spring 框架中的一种面向切面编程(Aspect-Oriented Programming,AOP)技术,用于解决横切关注点的问题。AOP 的主要思想是将通用...
3. **参数绑定**:`@RequestParam`、`@PathVariable`、`@MatrixVariable`等注解可以用来从URL中提取参数并绑定到方法参数上。 4. **模型数据**:`@ModelAttribute`注解可以用来将请求参数绑定到对象属性,或者将...
在Spring Boot框架中,`@ConfigurationProperties`注解是一个核心特性,它允许我们将配置属性从外部化配置文件(如application.properties或application.yml)绑定到Java对象的字段上,从而简化了属性管理。这个注解...
在Spring MVC框架中,`@Resource`注解是用来管理依赖注入(Dependency Injection,简称DI)的一种方式。这个注解主要用于标注字段或者方法,以便Spring容器能够自动为它们提供实例化对象。本文将深入探讨`@Resource`...