`
young-2017
  • 浏览: 9478 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

@Conditiional注解

 
阅读更多
条件注解@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注解实现多态对象的查询,jackson @JsonTypeInfo注解实现controller多态支持

    `@TypeDiscriminator` 和 `@JsonTypeInfo` 这两个注解分别来自Spring和Jackson库,它们用于解决序列化和反序列化过程中多态对象的处理问题。 首先,`@TypeDiscriminator` 是Spring Data JPA提供的一种注解,用于在...

    java @PostConstruct和@PreConstruct注解

    Java @PostConstruct 和 @PreConstruct 注解详解 Java 中的 @PostConstruct 和 @PreConstruct 注解是从 Java EE5 规范开始引入的,它们是用来修饰 Servlet 生命周期的两个重要的注解。下面将详细介绍这两个注解的...

    Mybatis-Plus中乐观锁@version注解的问题与解决方案.docx

    Mybatis-Plus 中乐观锁 @version 注解的问题与解决方案 Mybatis-Plus 是一个基于 Mybatis 的增强工具,它提供了许多实用的功能来简化数据库交互操作。在实际开发中,我们经常会遇到乐观锁的问题,特别是在使用 @...

    详解配置类为什么要添加@Configuration注解

    Spring Framework 中@Configuration 注解的重要性 @Configuration 注解是 Spring Framework 中的一个重要组件,它用于标注配置类,告诉 Spring Framework 如何处理 Bean 的创建和管理。在本文中,我们将深入探讨为...

    通过@Autowired注解注入bean的顺序,以及@bean注入.rar

    `@Autowired`和`@Bean`是两个关键注解,它们在实现DI时起着重要作用。让我们深入探讨这两个注解的工作原理,以及它们在注入bean时的顺序。 `@Autowired`注解由Spring提供,用于自动装配bean的依赖。当我们在字段、...

    springboot的@ConditionalOnBean注解.doc

    Spring Boot 中的 @ConditionalOnBean 注解 @ConditionalOnBean 注解是 Spring Boot 中的一种条件注解,用于判断 Bean 是否存在于容器中。该注解可以用在类或方法上,用于控制 Bean 的生命周期。 @...

    浅谈Spring中@Import注解的作用和使用

    @Import 注解是 Spring 框架中的一种重要注解,主要用于导入@Configuration 注解的配置类、声明@Bean 注解的 bean 方法、导入 ImportSelector 的实现类或导入 ImportBeanDefinitionRegistrar 的实现类。本篇文章将...

    spring boot 整合mybatis,基于@Select注解方式

    本教程将详细介绍如何在Spring Boot项目中整合MyBatis,并使用@Select注解来实现数据库查询。 首先,我们需要在Spring Boot项目中引入MyBatis的依赖。在`pom.xml`文件中添加如下依赖: ```xml <groupId>org....

    java之SpringCache之@Cacheable注解的说明使用

    在Spring3.1以后增加了一项happy的技术点,就是基于注解来实现缓存的技术。他的本质上不是具体的缓存方案实现,而是一个对缓存的抽象,让我们通过注解,实现少量的代码,达到实现缓存的方案。 Cacheable的说明 @...

    springboot使用@data注解减少不必要代码

    Spring Boot 使用 @Data 注解减少不必要代码 概述: 在 Spring Boot 项目中,我们经常需要编写实体类来存储和传输数据。在传统的编程方式中,我们需要手动编写 setter 和 getter 方法来完成数据的存取操作。然而,...

    Spring @Bean注解配置及使用方法解析

    Spring @Bean 注解配置及使用方法解析 @Bean 注解是 Spring 框架中用于生成 Bean 实例的注解,主要用在方法上,声明当前方法体中包含了最终产生 Bean 实例的逻辑。该注解可以与 @Component 或 @Configuration 一起...

    使用@Data注解get和set方法爆红的原因是没安装lombok的插件啊.docx

    试一试

    如何正确使用 @Qualifier 注解来解决多个同类型 Bean 注入的问题

    使用 @Qualifier 注解是解决 Spring 中多个同类型 Bean 注入冲突的一种常见方法。当我们在 Spring 容器中存在多个同一接口或父类的实现时,如果不明确指定要注入哪个实现,Spring 就会抛出 "Consider marking one of...

    Spring Boot中的@ComponentScan注解:深入理解组件扫描机制

    在Spring Boot中,@ComponentScan注解是一个关键特性,它负责控制Spring容器的组件扫描行为。本文将详细探讨@ComponentScan注解的作用、工作原理以及如何使用它来优化Spring Boot应用程序的组件管理。 @...

    Spring Aop实例(AOP 如此简单)@Aspect、@Around 注解方式配置

    Spring AOP 实例(AOP 如此简单)@Aspect、@Around 注解方式配置 Spring AOP 是 Spring 框架中的一种面向切面编程(Aspect-Oriented Programming,AOP)技术,用于解决横切关注点的问题。AOP 的主要思想是将通用...

    @Conditional注解应用.rar

    在Java Spring框架中,`@Conditional`注解是实现条件化bean注入的关键工具。这个注解允许我们在配置bean时设置一些条件,只有当这些条件满足时,对应的bean才会被Spring容器实例化并注入到应用程序中。这样的设计极...

    简化版@requestmapping注解注册源码

    3. **参数绑定**:`@RequestParam`、`@PathVariable`、`@MatrixVariable`等注解可以用来从URL中提取参数并绑定到方法参数上。 4. **模型数据**:`@ModelAttribute`注解可以用来将请求参数绑定到对象属性,或者将...

    Spring Boot技术知识点:如何理解@ConfigurationProperties注解

    在Spring Boot框架中,`@ConfigurationProperties`注解是一个核心特性,它允许我们将配置属性从外部化配置文件(如application.properties或application.yml)绑定到Java对象的字段上,从而简化了属性管理。这个注解...

    springmvc @Resource 注解方式问题

    在Spring MVC框架中,`@Resource`注解是用来管理依赖注入(Dependency Injection,简称DI)的一种方式。这个注解主要用于标注字段或者方法,以便Spring容器能够自动为它们提供实例化对象。本文将深入探讨`@Resource`...

Global site tag (gtag.js) - Google Analytics