底层注解

@Import({DBHelper.class})
@Configuration(proxyBeanMethods = false)
public class MyConfig {
    @Bean("User")
    public User user01(){
        User user = new User("zhangsan", 18);
        return user;
    }
}

 

@Configuration

1、标识为 Spring Boot 的一个配置类

2、配置类仍是容器的组件

3、proxyBeanMethods

(1)代理 bean 的方法,默认为 true

boolean proxyBeanMethods() default true;

(2)Lite 模式:proxyBeanMethods = false,每个 @Bean 方法被调用的组件都是新创建的;配置类组件之间无依赖关系,使用 Lite 模式,加速容器启动过程,减少判断

(3)Full 模式:proxyBeanMethods = true,保证每个 @Bean 方法被调用返回的组件都是单实例的;配置类组件之间有依赖关系,必须使用 Full 模式,方法被调用得到单实例组件

 

@Bean

1、标注在方法上,给容器注册组件

2、以方法名作为组件 id,返回类型为组件类型,返回值为组件在容器中的实例

3、默认为单实例

 

@Import

public @interface Import {
   Class<?>[] value();
}

1、标注在容器的组件类上

2、利用反射,根据无参构造器,自动创建出组件,并导入容器

3、默认组件名为全类名

 

@ImportResource

1、标注在配置类上

2、"classpath:配置文件的路径",引入 resource 目录下 xml 配置文件

String[] locations() default {};

3、@Import:导入配置类 / 组件;@ImportResource:只导入 xml 配置

 

@Conditional

1、条件装配:满足 @Conditional 指定的条件,才进行组件注入

2、标注在类 / 方法上

3、@Conditional 为根注解,有大量派生注解

4、等级条件

(1)@ConditionalOnClass 和 @ConditionalOnMissingClass 允许根据特定类的存在与否,来注入 bean

(2)可以使用 value 属性来引用真实类,即使该类实际上可能不会出现在正在运行的应用程序类路径中;也可以使用 name 属性,使用 String 值指定类名

(3)如果使用 @ConditionalOnClass 或 @ConditionalOnMissingClass 作为元注释的一部分来编写自己的组合注释,则必须使用 name 作为引用该类的情况,在这种情况下不会处理

5、Bean 条件

(1)@ConditionalOnBean 和 @ConditionalOnMissingBean 允许根据特定 beans 的存在与否,来注入 bean

(2)使用 value 属性按类型指定 beans,或使用 name 按名称指定 beans;search 属性允许限制搜索 beans 时,应考虑的 ApplicationContext 层次结构

(3)置于 @Bean 方法时,目标类型默认为方法的返回类型,如果 ApplicationContext 中未包含该注解下的类对象,则将创建该类对象

(4)需要非常小心添加 bean 定义的顺序,因为这些条件是根据到目前为止,已处理的内容进行评估的,因此,建议仅对自动配置类使用 @ConditionalOnBean 和 @ConditionalOnMissingBean,因为这些注释保证在添加任何用户定义的 bean 定义后加载

6、Property 条件

(1)@ConditionalOnProperty 允许基于 Spring Environment 属性包含配置

(2)使用 prefix 和 name 属性指定应检查的属性,默认情况下,匹配存在且不等于 false 的任何属性

(3)可以使用 havingValue 和 matchIfMissing 属性创建更高级的检查

7、资源条件

(1)@ConditionalOnResource 仅在存在特定资源时才允许配置

(2)可以使用通常的 Spring 约定来指定资源,如以下示例所示:file:/home/user/test.dat

8、Web 应用程序条件

(1)@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication 允许配置,具体取决于应用程序是否为“Web 应用程序”

(2)Web 应用程序是使用 Spring WebApplicationContext,定义 session 范围,或具有 StandardServletEnvironment 的任何应用程序

9、SpEL 表达条件

(1)@ConditionalOnExpression 注释允许根据 SpEL 表达式的结果包含配置

 

注入属性

1、@ConfigurationProperties

(1)配置绑定:读取 resource 目录下 properties 文件中的内容,并且把它封装到 JavaBean 中

(2)标识到类上

(3)该类必须为 Spring 的组件,即搭配 @Component、@Service、@Controller、@Repository 任一注解

(4)prefix:有效绑定到此对象的属性的前缀,有效的前缀由一个或多个用点分隔的单词定义,若注释未提供任何前缀,则仅使用 bean 的完全限定名称

String prefix() default "";

(5)指定 prefix 后,会将该前缀的值注入到 value

String value() default "";

2、@EnableConfigurationProperties

(1)标识在配置类上

(2)搭配 @ConfigurationProperties,value[] 为 @ConfigurationProperties 所标识的类

Class<?>[] value() default {};

(3)利用反射,开启指定类的配置绑定功能,并把该组件自动注册到容器中

(4)@EnableConfigurationProperties 可以有效引入第三方的包,不需要第三方的类注册为组件

posted @   半条咸鱼  阅读(35)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示