我是靠谱客的博主 碧蓝烧鹅,最近开发中收集的这篇文章主要介绍Springboot怎样通过注解的方式添加组件到容器中????1.@Configuration2 @controller,@Repository,@Service,@Component3.@Import4.@Conditional(条件装配)5.@ImportResource,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Spring容器中怎样添加组件????

  • 1.@Configuration
  • 2 @controller,@Repository,@Service,@Component
  • 3.@Import
  • 4.@Conditional(条件装配)
  • 5.@ImportResource

1.@Configuration

通过该注解,可以替代xml实现完全注解开发
做法:

  • 1.创建一个配置类,并在类上添加@Configuration注解
  • 2 在方法中返回一个实例对象,并在方法中添加@Bean注解

@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
}

注意:
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件

* @Bean :给容器添加组件,(在配置文件中用<bean><bean/>标签添加组件)

* 容器中组件默认的id就是方法名,可以通过@Bean("tom")自定义

  • 配置类本身也是一个组件(实际上是一个代理对象)
  • 从spring5.2以后,@Configuration注解中多了一个属性,默认是true
    在这里插入图片描述
    - 默认是true代表:springboot总会检查该组件是否已经存在于容器中,如果容器中已经存在,就直接使用; 如果没有,才会调用该方法,这也就是说通过 @Bean生成的组件是单例的,无论外界调用多少次方法,获取多少次都是同一个组件
    - 如果将该属性置位false.则每调用一次方法,就会新创建一个组件

根据属性proxyBeanMethods的不同取值对应着@configuration的两种配置
proxyBeanMethods=true叫作Full(全配置)
proxyBeanMethods=false叫作Lite(轻量级配置)

之所以有这两种配置,
是为了解决组件依赖的问题
(所谓组件依赖就是一个组件中含有另一个组件)

在这里插入图片描述
>总结:如果我们注册的组件不依赖其他组件,那么就把proxyBeanMethods属性置位false,
相反如果组件中依赖了其他组件,就置为true
原因是:如果proxyBeanMethods为true,那么每次在调用方法时,都会先去容器中寻找有无该组件,试想如果你只是单纯一个组件,不依赖其他组件,那这样就会使你的项目加载变慢,影响性能,因此此时设为false较为合适;
相反,如果你的组件要依赖其他组件,那么此时应该设为true;

2 @controller,@Repository,@Service,@Component

这4个注解同样是添加组件的注解

3.@Import

该注解作用在普通类,配置类上,会通过调用无参构造方法给容器中导入主键;
导入的主件可以是普通类,也可以引入第三方jar包中的类
在这里插入图片描述

4.@Conditional(条件装配)

满足指定的条件,则进行组件注入

在这里插入图片描述
该注解是一个组合注解,拿@ConditionalOnBean注解为例
在这里插入图片描述
解释:该注解标在user01方法上,表示如果容器中有名为name注解的主件,才会创建User01主件,如果容器中不存在,那么就不会创建;

如果把@ConditionalOnBean标在类上,在这里插入图片描述
表示如果容器中不存在名为tom的主件,那么该配置类中的所有主件都不会被创建

@Conditional扩展注解作用(判断是否满足当前指定条件)
@ConditionalOnJava系统的java版本是否符合要求
@ConditionalOnBean容器中存在指定Bean;
@ConditionalOnMissingBean容器中不存在指定Bean;
@ConditionalOnExpression满足SpEL表达式指定
@ConditionalOnClass系统中有指定的类
@ConditionalOnMissingClass系统中没有指定的类
@ConditionalOnSingleCandidate容器中只有一个指定的Bean,或者这个Bean是首选Bean
@ConditionalOnProperty系统中指定的属性是否有指定的值
@ConditionalOnResource类路径下是否存在指定资源文件
@ConditionalOnWebApplication当前是web环境
@ConditionalOnNotWebApplication当前不是web环境
@ConditionalOnJndiJNDI存在指定项

5.@ImportResource

@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

在这里插入图片描述

在这里插入图片描述

最后

以上就是碧蓝烧鹅为你收集整理的Springboot怎样通过注解的方式添加组件到容器中????1.@Configuration2 @controller,@Repository,@Service,@Component3.@Import4.@Conditional(条件装配)5.@ImportResource的全部内容,希望文章能够帮你解决Springboot怎样通过注解的方式添加组件到容器中????1.@Configuration2 @controller,@Repository,@Service,@Component3.@Import4.@Conditional(条件装配)5.@ImportResource所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部