[SpringBoot] 利用spring.factories机制加载Bean

通常我们需要注册一个bean会使用注解的形式,比如@Component注解,但是在阅读源码的时候我们发现一些bean上面并没有 该注解或者其他注册为bean的注解,甚至没有任何注解,这就纳闷了,仔细发现它用到了spring.factories机制。 在zuul的源码阅读中,找到了org.springframework.cloud.netflix.zuul.filters包下有很多已经实现好的过滤器,这些都是zuul组件进行路由转发的关键,但是并没有采用注解,如下:
package org.springframework.cloud.netflix.zuul.filters.pre;

public class DebugFilter extends ZuulFilter {

	private static final DynamicBooleanProperty ROUTING_DEBUG = DynamicPropertyFactory
			.getInstance().getBooleanProperty(ZuulConstants.ZUUL_DEBUG_REQUEST, false);

	private static final DynamicStringProperty DEBUG_PARAMETER = DynamicPropertyFactory
			.getInstance().getStringProperty(ZuulConstants.ZUUL_DEBUG_PARAMETER, "debug");

  ...省略..

}
     PS:DebugFilter 过滤器并且有添加任何注解

找到该包下的META-INF下面的spring.factories文件,发现有如下的一行:
org.springframework.cloud.netflix.zuul.ZuulServerAutoConfiguration,
找到ZuulServerAutoConfiguration这个自动配置类,代码如下:

@Configuration
@EnableConfigurationProperties({ ZuulProperties.class })
@ConditionalOnClass(ZuulServlet.class)
@ConditionalOnBean(ZuulServerMarkerConfiguration.Marker.class)
// Make sure to get the ServerProperties from the same place as a normal web app would
@Import(ServerPropertiesAutoConfiguration.class)
public class ZuulServerAutoConfiguration {
    ...省略..
	@Bean
	public DebugFilter debugFilter() {
		return new DebugFilter();
	}
	 ...省略..
}

这里面通过@Bean注解注册了很多bean,其中就有DebugFilter,当然还有很多其他的过滤器和相关的组件,到这步如果还想知道为什么这样做就可以将里面的bean注册,就需要探究spring.facories机制的原理和加载时机了。这就不在本文详述,这里主要是介绍这一种方式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值