我刚刚下载了该项目:
https://github.com/habuma/facebook-security5
我启动了该项目并且它运行正常。这个基本项目的主要功能是通过 Facebook 验证用户身份并获取他的 feed。
该项目内有文件:
https://github.com/habuma/facebook-security5/blob/master/src/main/java/sample/SocialConfig.java
内容如下:
package sample;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.web.context.annotation.RequestScope;
import sample.api.facebook.Facebook;
@Configuration
public class SocialConfig {
@Bean
@RequestScope
public Facebook facebook(OAuth2AuthorizedClientService clientService) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String accessToken = null;
if (authentication.getClass().isAssignableFrom(OAuth2AuthenticationToken.class)) {
OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;
String clientRegistrationId = oauthToken.getAuthorizedClientRegistrationId();
if (clientRegistrationId.equals("facebook")) {
OAuth2AuthorizedClient client = clientService.loadAuthorizedClient(clientRegistrationId, oauthToken.getName());
accessToken = client.getAccessToken().getTokenValue();
}
}
return new Facebook(accessToken);
}
}
我注意到没有对该类的引用:SocialConfig
。
我的问题是:为什么当我删除这个未引用的类时,当我尝试运行应用程序时,会收到以下错误?
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in sample.HomeController required a bean of type 'sample.api.facebook.Facebook' that could not be found.
Action:
Consider defining a bean of type 'sample.api.facebook.Facebook' in your configuration.
注释有什么含义:{ @Configuration, @Bean, @RequestScope }
谢谢!
最佳答案
我认为你需要阅读 Spring 中基于注释的配置:
- @Configuration 注释一个 Java 类,该类定义要由应用程序使用的 Spring bean - 有点像应用程序上下文 XML 文件,但采用 Java 类的形式。
- @Bean 注释一个定义应用程序要使用的 Spring bean 的方法。该方法返回的值将是新的 Spring bean,并且方法名称将用于派生该 bean 的名称。
因此,当您删除该 Java 类时,您就删除了应用程序使用的 Spring bean 的定义,因此它无法启动并出现“Missing bean”错误。
@RequestScope 注释描述了有关 bean 生命周期的一些内容 - 我认为这意味着 Spring 将为它处理的每个 HTTP 请求自动创建该 bean 的一个新实例。
关于java - 应用程序无法启动 - 无法找到所需类型的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51453009/