springboot value注解默认值_SpringBoot(八):SpringBoot的自动装配

SpringBoot的自动装配 起源于 spring Framework的手动装配。

spring模式注解装配:

定义:一种用于声明在应用中扮演“组件”角色的注解
举例:Component    Service    Configuration  Controller等注解
装配:<context:component-scan> spring2.5 或者 ComponentScan注解 spring3.1

daca8d05ae35b97905ab14eb77c07002.png

9091c34ec30e79ff72d61bcefee585b3.png

2e050d3ddf9e205f972e19f738e19d59.png

048fdc0a6c55ac71259d76429cfd24b5.png

78554226adfadb331b441faee0096858.png

什么是派生性?下来创建一个空的springboot工程: 然后添加包和代码:

0a52f4a392303fc803232b314fd8ee54.png

d531de261675c78bbca47476f2fa69ae.png

c44e5c8d7fa436d1bb359424245a7467.png

现在FirstLevelRepository是一个注解,肯定要用到某个类上面去,所以继续建包建类

创建repository包然后建立MyFirstLevelRepository类,给类上添加FirstLevelRepository注解,然后这个MyFirstLevelRepository类就会成为一个Bean

714365ce3a298860ca1f75503cfedf6b.png

如何说明MyFirstLevelRepository类成为了一个bean呢?

再添加一个包,添加一个启动类:

9e2929fa6c78e7a213a8fecdc1a5d4e5.png

上图中少了一句输出的代码,否则控制台看不到

a3183e333416fc3e9abed50b69ce26aa.png

运行看结果:可以看到这个bean存在。

97f46e2382f89885c48272ff99b98857.png

修改注解:

d0fad92e9492968ec5c3c415adda1f70.png

再次运行代码:会发现这个类也是存在的。

41e519352fdf15d5ab47f2fd605f5ec4.png

65ba8c519b22af7887ea504ce546b1c5.png

Spring @Enable 模块装配

Spring Framework 3.1 开始支持”@Enable 模块驱动“。所谓“模块”是指具备相同领域的功能组件集合, 组合所形成一个独立的单元。比如 Web MVC 模块、AspectJ代理模块、Caching(缓存)模块、JMX(Java 管 理扩展)模块、Async(异步处理)模块等。

@Enable 注解模块举例

3b2442e17335b4cc960471b18689c6f9.png

48a31af31b5a7ffa93fb9c89b5f293d4.png

e45a010b897a5520c386defc6aeb8ac9.png

6d7a26b76a848aa2d6398b99e4882634.png

f32931d303391314b8dbd6749139a682.png

7aebe2d1791eaf6d7548c99dfd2bd780.png

9e842b808532655e36ffd15cddc1c126.png

看一下这个实现类:SpringFactoriesLoader

510a73381addeffdacea20259e84a17d.png

看一下这个类的注释:

6400847b9fd5c62582069361cd1950ed.png

意思是:

*框架内用于内部使用的通用工厂加载机制。
{@code SpringFactoriesLoader} {@linkplain #loadFactories加载}和实例化

*来自{@value #FACTORIES_RESOURCE_LOCATION}文件的给定类型的工厂

*可能存在于类路径中的多个JAR文件中。{@code spring.factories}

*文件必须是{@link Properties}格式,其中的键是完全限定的

*接口或抽象类的名称,其值是用逗号分隔的列表

实现类名。

主要实现方法是:

2e2f84790d2ec9dc45c0f7bd6569d5cf.png

注释的意思是:

 * *

加载并实例化给定类型的工厂实现

* {@value #FACTORIES_RESOURCE_LOCATION},使用给定的类装入器。

*

返回的工厂是通过{@link AnnotationAwareOrderComparator}排序的。

*

如果需要自定义实例化策略,使用{@link #loadFactoryNames}

*取得所有已登记的工厂名称。

* @param factoryType接口或表示工厂的抽象类

* @param类加载器用于加载的类加载器(可以是{@code null}来使用默认值)

* @抛出IllegalArgumentException如果任何工厂实现类不能

*加载或在实例化任何工厂时发生错误

* @see # loadFactoryNames

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值