You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring集成测试启动失败:找不到InstantiationAwareBeanPostProcessorAdapter类

问题排查与解决方案

1. ClassNotFoundException: InstantiationAwareBeanPostProcessorAdapter 异常修复

该类在Spring 5.3+版本已被移除,Spring Boot 3依赖Spring 6,因此不存在这个类。异常原因通常是:

  • 项目引入了依赖旧Spring版本的第三方库
  • 代码中直接引用了这个已废弃的类

修复步骤:

  • 检查pom.xml或build.gradle,确保所有Spring相关依赖版本与Spring Boot 3对齐,排除旧版本依赖
  • 若自定义代码中引用了该类,替换为org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,直接实现该接口即可

2. 集成测试类的问题修复

你的测试类混用了JUnit 4和JUnit 5 API,导致运行冲突:

  • 导入了JUnit 5的@Test,却使用JUnit 4的@RunWith(Suite.class)
  • Spring Boot 3默认使用JUnit 5,无需依赖JUnit 4的@RunWith

修改后的测试代码:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Spring3jwtdemoApplicationTests {
  
  @Autowired
  private TestRestTemplate restTemplate;

  @Test
  public void contextLoads() {
    System.out.println("This should work");
  }
}

若需测试套件功能,改用JUnit 5的@Suite注解(需添加junit-platform-suite依赖):

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses(Spring3jwtdemoApplicationTests.class)
public class TestSuite {
}

3. SecurityConfiguration 编译错误修复

Spring Boot 3对应的Spring Security 6移除了WebSecurityConfigurerAdapter,需采用基于Bean的配置方式:

  • 移除继承WebSecurityConfigurerAdapter的代码,改为定义SecurityFilterChain、UserDetailsService、PasswordEncoder等Bean
  • 确保所有Spring Security API调用符合Spring Security 6语法,比如权限表达式、过滤器配置

示例配置结构:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

    private final UserDetailsService userDetailsService;

    public SecurityConfiguration(UserDetailsService userDetailsService) {
        this.userDetailsService = userDetailsService;
    }

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .csrf(csrf -> csrf.disable())
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/auth/**").permitAll()
                .anyRequest().authenticated()
            );
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
        return config.getAuthenticationManager();
    }
}

内容的提问来源于stack exchange,提问作者Jak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:56:15