Spring注解-(五)@Conditional的作用

本文最后更新于:June 13, 2022 am

Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。

目录

表示某一些条件。可以放在类上和方法上。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.SpringTestAnnotation.TestValue;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component;

/**
* @Author DragonOne
* @Date 2022/6/10 21:56
* @墨水记忆 www.tothefor.com
*/
@Component
@Conditional(value = {OurCondi.class})
public class OrderS {
}

表示:用@Component表示OrderS会成为一个Bean,但是有一个前提条件:@Conditional(value = {OurCondi.class}),具体的前提条件就是写在OurCondi实现类中。此类需要实现Condition接口(切记不要导出包),重新匹配方法matches。

匹配规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.SpringTestAnnotation.TestValue;


import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
* @Author DragonOne
* @Date 2022/6/13 10:52
* @墨水记忆 www.tothefor.com
*/
public class OurCondi implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//自定义规则,必须返回true才行,如果返回false则表示不满足条件,也就不会放到容器中
// ....
return false;
}
}

ConditionContext

可以拿到Spring容器层面里的东西,如BeanFactory等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.SpringTestAnnotation.TestValue;


import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
* @Author DragonOne
* @Date 2022/6/13 10:52
* @墨水记忆 www.tothefor.com
*/
public class OurCondi implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
System.out.println(conditionContext.getBeanFactory());
System.out.println(conditionContext.getClassLoader());
System.out.println(conditionContext.getClass());
System.out.println(conditionContext.getEnvironment());
System.out.println(conditionContext.getRegistry());
System.out.println(conditionContext.getResourceLoader());
return true;
}
}

AnnotatedTypeMetadata

可以获取此条件是写在了哪一个类上面,以及类的一些信息。