一图搞清楚@Bean、@Configuration、@Component、@Service、@Controller、@Repository注解
一图搞清楚@Bean、@Configuration、@Component、@Service、@Controller、@Repository注解
摘要
想要搞清楚这几个注解,首先我们要知道为什么要搞清楚他们,而不是他们几个跟其它注解呢?
在我们使用springboot时,spring框架的优势在于利用AOP和IOC来帮助我们创建对象,从而实现解耦的效果。而springboot相比于spring框架的优势就是通过自动配置的方式简化了开发。
那么springboot是怎样实现自动配置呢?
就是通过IOC(控制反转)以及他的实现方式DI(依赖注入)来实现。而这个过程就是通过我们声明的相应的注解来将我们的类、方法添加到spring中的IOC容器当中。
那么将我们的类、方法等添加到IOC容器当中用什么方式来实现呢?
没错,就是注解的方式
下图是这几个注解所在的包

1、Bean与Configuration
1、我们先来看bean。
这里我把源码中的文档注释拿过来了。因为体量问题,我只拿出来了一部分关键的地方,来帮祝我们去理解。如过想要了解的更加全面,还是希望各位可以翻阅一下,原文的文档注释。

看不懂没关系,我们对照翻译看一看

他说该注解就是声明哪个方法要交给spring容器管理,也就是我们的IOC容器。
我们继续看


该段声明了,我们的bean通常情况下是在@Configuration中声明。
在下面又提到了,不在通常情况下,我们的bean可以如何使用:


但是这里的不在@Configuration中声明的意思不是在普通的类中声明就可以使用,他这里的意思是可以在@Component中声明。避免误导,该段一定要引起注意!
这里我在@SpringBootApplication启动类中做了以下测试:
大致的意思就是声明了两个@Bean一个在没有任何标记的普通类中,另一个在我们的启动类中。
启动类中、、

没有任何注解的测试类中、、

结果如下:

可以看到,如果在没有任何注解的普通类中,我们的@Bean注解是不会被加入到IOC容器当中的。
2、接着看一下@Configuration

看不懂没关系,我们利用科技:

该注解的文档注释,开头就指出了这个类中可以声明多个由@Bean注解的方法,被Spring IOC容器管理。
我们接着看


这种英文直译多多少少有一些生硬,大致意思就是@Configuration里面包含@Component注解,故我们在使用@ComponentScan扫描@Component注解时,也会将我们的@Configuration注解所定义的类加入到容器当中。
额,上面涉及到了陌生的注解,但是没有关系他还没有脱离我们这篇文章的范畴。让我们耐心一些,继续看下去。
2、Component以及包含它的注解们
先上几张图,也许各位就会通透。
首先根据三层架构的思想我们先来看控制层

注意里面的黄色注解:@Component
再来看业务层

之后看持久层

再来回忆一下文章开篇的组织图,为了阅读方便我将它拿了过来,如下:

由Component衍生出来的三个注解也就不言而喻了。
正是对应的我们的三层架构的思想而衍生出来的三个注解,为了声明我们相对应的三层架构。
既然是衍生,那么万变不离其宗,我们去看@Component注解:

科技来--》

什么意思呢?我的理解就是,该类统筹了他们四个注解(@Component、@Configuration,@Controller、@Repository,@Configuration)在项目启动时的加入操作。
3、Bean的依赖注入
Bean的依赖注入指的是,我们的参数列表,即便没有实例化的情况下,依旧可以正常使用参数列表当中的一个或多个对象,这就是Bean的依赖注入。
怎么实现的呢?
Bean可以引用一个或多个IOC容器中已经存在的Bean,来直接使用,实例化的过程在容器中,我们的Bean可以直接拿来使用即可。

该篇文章,只是在组织结构上面对于这几个有着千丝万缕联系的注解做一个区分,具体的使用细节还请移步到文档注释去查看。
该文章只是作者本人的浅薄观点,若有不足之处,还请随时指出。
更多推荐


所有评论(0)