3

我正在开发一个相当简单的 Spring Boot 应用程序,它使用了一些 Java Config 类。但是,似乎配置没有被拾取。我到处都有断点,但没有任何东西被绊倒。我什至扔了几个RuntimeExceptions 只是为了看看我的调试器是否在弗里茨。

在我的主课中,我有标准的 Spring Boot 主课:

@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

如您所见,我用@ComponentScanand标记了它@EnableAutoConfiguration。该类Application位于类路径的根目录。我对@ComponentScan注解的理解是它会搜索它下面的所有配置类。

在下一层的包中,我拥有所有配置类:

我的“通用”配置

@Configuration
@EnableJpaRepositories("com.codechimp.XXX.repository")
@EnableTransactionManagement
public class AppCommonConfig {
    @Inject
    private Environment environment;

    /* Define common beans here like datasource and such */
}

还有我的 Spring Security 配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Inject
    private LocalXXXUserDetailsService localXXXUserDetailsService;

        /**
     * @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(HttpSecurity)
     */
    @Autowired
    protected void configure(HttpSecurity http) throws Exception {
        //  Configure http
    }

    /**
     * @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configureGlobal(AuthenticationManagerBuilder)
     */
    @Autowired
    protected void configureGlobal(AuthenticationManagerBuilder auth)
            throws Exception {
        // Configure auth
    }
}

但是,当我运行该应用程序时,它似乎没有调用这些配置类中的任何方法。就好像他们被完全忽略了一样。正如我所说,我已经尝试设置断点,甚至在所有方法的开头抛出 RuntimeException ,如下所示:

if (true)
    throw new RuntimeException("Break!");

诚然,我在使用 Java Config 方面没有太多经验,但我一遍又一遍地阅读文档,我没有看到缺失的部分。

4

2 回答 2

1

我认为你需要Application成为一个@Configuration.

从默认包中执行 a 不是一个好主意@ComponentScan(我假设这就是您所说的“类路径的根”)。这肯定会关闭一些东西,但更严重的是它会导致对类路径上的所有 jar 进行大量扫描,这不是一个好主意(并且可能导致应用程序失败)。

于 2014-04-03T06:44:37.317 回答
0

您需要添加

@SpringBootApplication

到你的 Spring Boot 主类。从文档:

/** * 表示一个 {@link Configuration 配置} 类,它声明一个或多个 * {@link Bean @Bean} 方法并且还触发 {@link EnableAutoConfiguration * auto-configuration} 和 {@link ComponentScan 组件扫描}。这是一个方便的 * 注释,相当于声明 {@code @Configuration}、* {@code @EnableAutoConfiguration} 和 {@code @ComponentScan}。* * @author Phillip Webb * @author Stephane Nicoll * @since 1.2.0 */

于 2020-01-24T16:59:03.263 回答