SpringBoot的自动装配 起源于 spring Framework的手动装配。
spring模式注解装配:
定义:一种用于声明在应用中扮演“组件”角色的注解
举例:Component Service Configuration Controller等注解
装配:<context:component-scan> spring2.5 或者 ComponentScan注解 spring3.1
什么是派生性?下来创建一个空的springboot工程: 然后添加包和代码:
现在FirstLevelRepository是一个注解,肯定要用到某个类上面去,所以继续建包建类
创建repository包然后建立MyFirstLevelRepository类,给类上添加FirstLevelRepository注解,然后这个MyFirstLevelRepository类就会成为一个Bean
如何说明MyFirstLevelRepository类成为了一个bean呢?
再添加一个包,添加一个启动类:
上图中少了一句输出的代码,否则控制台看不到
运行看结果:可以看到这个bean存在。
修改注解:
再次运行代码:会发现这个类也是存在的。
Spring @Enable 模块装配
Spring Framework 3.1 开始支持”@Enable 模块驱动“。所谓“模块”是指具备相同领域的功能组件集合, 组合所形成一个独立的单元。比如 Web MVC 模块、AspectJ代理模块、Caching(缓存)模块、JMX(Java 管 理扩展)模块、Async(异步处理)模块等。
@Enable 注解模块举例
看一下这个实现类:SpringFactoriesLoader
看一下这个类的注释:
意思是:
*框架内用于内部使用的通用工厂加载机制。
{@code SpringFactoriesLoader} {@linkplain #loadFactories加载}和实例化
*来自{@value #FACTORIES_RESOURCE_LOCATION}文件的给定类型的工厂
*可能存在于类路径中的多个JAR文件中。{@code spring.factories}
*文件必须是{@link Properties}格式,其中的键是完全限定的
*接口或抽象类的名称,其值是用逗号分隔的列表
实现类名。
主要实现方法是:
注释的意思是:
* *
加载并实例化给定类型的工厂实现
* {@value #FACTORIES_RESOURCE_LOCATION},使用给定的类装入器。
*
返回的工厂是通过{@link AnnotationAwareOrderComparator}排序的。
*
如果需要自定义实例化策略,使用{@link #loadFactoryNames}
*取得所有已登记的工厂名称。
* @param factoryType接口或表示工厂的抽象类
* @param类加载器用于加载的类加载器(可以是{@code null}来使用默认值)
* @抛出IllegalArgumentException如果任何工厂实现类不能
*加载或在实例化任何工厂时发生错误
* @see # loadFactoryNames
* /