我一直在关注如何让网站使用spring-security和spring-social进行身份验证的一些教程。我得到了整个基本的工作。该代码包含一个用于定义ConnectionFactoryLocator
的bean,如下所示:
@Bean
public ConnectionFactoryLocator connectionFactoryLocator() {
ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();
registry.addConnectionFactory(new FacebookConnectionFactory(
environment.getProperty("spring.social.facebook.appId"),
environment.getProperty("spring.social.facebook.appSecret")));
return registry;
}
所以,这一切都很好,直到我想在这个bean中做一些不同的事情,并意识到它根本就没用过。 spring-boot输出显示:
Overriding bean definition for bean 'connectionFactoryLocator' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=true; factoryBeanName=securityConfiguration; factoryMethodName=connectionFactoryLocator; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [myapp/configuration/SecurityConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.social.config.annotation.SocialConfiguration; factoryMethodName=connectionFactoryLocator; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/social/config/annotation/SocialConfiguration.class]]
我在线阅读并了解了自动配置的概念,以及它可以启用而无需在spring-boot中明确请求它。
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html
根据这个站点,配置应该是非侵入性的,并且定义我自己的bean应该使自动的"退回"。但是,在这种情况下不会发生这种情况。
我尝试添加属性spring.autoconfigure.exclude=org.springframework.social.config.annotation.SocialConfiguration.class
但覆盖仍然发生。使用调试运行应用程序会正确显示排除
Exclusions:
-----------
org.springframework.social.config.annotation.SocialConfiguration.class
但是自动配置的bean是占主导地位的bean。我看到的最后一个有趣的事情是,如果我删除了我自己的bean的定义,应用程序就不再开始抱怨该bean没有匹配项了。即使没有排除,这最后的事情也会发生。
我还尝试将id / secret属性的名称从spring-social标准更改为我自己的名称,除了在自动配置的bean上运行时应用程序无法正常工作之外没有任何效果。
我意识到可能有一个基本的春天概念,我不是很抓,但我已经读过并且不能理解。似乎弄明白它可能是什么。
感谢。