spring boot 之自动装配

前言

在最初接触spring 的时候,还是使用xml进行装配,我记得很清楚,当时分别配置了spring-dao.xml , spring-service.xml , spring-controller.xml。然后把所有需要用到的扫包,注入bean,以及配置,全都一股脑的塞进xml中,虽然出发点很好,不用在java代码中硬编码了,但是xml的可读性并不是很好,那阵子,真是痛苦的要命。

正文

后来逐渐的接触到了spring boot,发现这个东西开发起来简单的要命,几乎自己不需要过多的考虑spring 与别的框架整合的问题,所有的一切spring boot已经帮我们做好了,只需要在application.properties 配置一下就完事。
但是spring boot 因为大部分的东西,已经不需要我们在着手了,所以对我们而言,“易学难精”。所以我决定好好把spring boot的原理搞清楚,今天就来说一说自动装配。
这里提前说一下,Spring boot的注入一共有四种方式:

1.通过 spring 模式注解 装配
2.通过@Enable* 注解进行装配
3.通过条件注解装配
4.通过工厂类去加载

下面我会逐一说到以上这几点。

通过 spring 模式注解 装配

模式注解的方式,尽管我们刚开始接触spring,spring mvc 框架,我们也应该会知道他们到底是怎么使用的。
以@Component为首 派生的 @Controller,@Service, @Repository。分别对应了我们工程中的controller层,业务层,和数据持久层,这里我就不做过多结束了,只要把注解放在类上就可以被自动的注入到spring 的context中。

通过@Enable* 注解进行装配

很多人会问为什么有了模式注解的装备,还需要@Enable* 这个注解呢?
这个问题问的非常好,纵观整个Web的发展,我们可以看出来,是一个化繁为简的模块化趋势。
所以@Enable* 也是具有同样道理的,例如@EnableWebMvc就是一个web组件的集合。
@Enable注解有很多种:
例如说 @EnableAutoConfiguration,@EnableWebMvc,@EnableCaching,@EnableAsync等。
@Enable
的注入主要又可以分成两种:

1.使用注解的方式注入
2.使用接口编程的方式注入
Tips:但是不管是哪一种方式都是通过 @Enable* 注解定义上的@Import注解引入的。

使用注解的实现(是在Serlet3.0出现的)就是说在@Enable*的@Import注解中,加载的那个类是被@Configuration注入的,例如@EnableWebMvc。
代码如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.web.servlet.config.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
//这就是上面说的哪个@Import注解,我们继续查看下DelegatingWebMvcConfiguration 这个类
@Import({DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
}

DelegatingWebMvcConfiguration 代码如下(只是摘取了部分,有所省略):

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.web.servlet.config.annotation;

im
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值