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

Spring Boot中UnsatisfiedDependencyException异常排查求助

异常解决建议

核心问题定位

异常明确说明:Spring容器中找不到FlightRepositoryImpl类型的bean,无法注入到FlightServiceImpl的构造方法中。根源是上下文扫描范围错误、组件未标记Spring注解、业务代码注解误用这三点。

具体修复步骤

1. 合并Spring上下文,避免重复创建

你同时启动了两个独立的Spring容器(SpringApplication.run() + AnnotationConfigApplicationContext),完全没必要。直接使用Spring Boot启动后的上下文即可:

package com.tbonegames.AirlineFlightManager;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

import com.tbonegames.services.FlightServiceImpl;

@SpringBootApplication(scanBasePackages = "com.tbonegames") // 扫描项目所有子包
public class AirlineFlightManagerApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(AirlineFlightManagerApplication.class, args);

        FlightServiceImpl fsi = context.getBean(FlightServiceImpl.class);
        fsi.addFlight("1004", "American Airlines", "Chicago", "Miami", 125.00, 3);
    }
}
  • scanBasePackages = "com.tbonegames"确保services、repository、flights等所有子包都被Spring扫描到。

2. 给FlightRepositoryImpl添加Spring组件注解

在FlightRepositoryImpl类上添加@Repository注解,让Spring识别并将其注册为容器内的bean:

package com.tbonegames.repository;

import com.tbonegames.flights.Flight;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.Map;

@Repository // 标记为数据访问层组件
public class FlightRepositoryImpl {
    private Map<String, Flight> flightMap = new HashMap<>();

    public void store(Flight flight) {
        flightMap.put(flight.getFlightId(), flight);
    }

    public Flight search(String flightId) {
        return flightMap.get(flightId);
    }
    // 其他CRUD方法按需补充
}

3. 修正FlightServiceImpl的注解与代码问题

(1)移除错误的@Bean注解

@Bean仅用于配置类中声明bean,不能加在业务方法上,直接删除所有方法上的@Bean;

(2)用@Service替代@Component(语义更明确);

(3)避免继承实体类Flight,业务服务类应依赖实体而非继承;

(4)构造方法注入保持简洁(Spring 4.3+可省略@Autowired,保留也可)。

修正后的FlightServiceImpl:

package com.tbonegames.services;

import com.tbonegames.flights.Flight;
import com.tbonegames.repository.FlightRepositoryImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;

@Service // 语义化的服务层注解
public class FlightServiceImpl implements FlightService {

    private final FlightRepositoryImpl fri;
    private ArrayList<Flight> flightList = new ArrayList<>();

    @Autowired
    public FlightServiceImpl(FlightRepositoryImpl fri) {
        this.fri = fri;
    }

    @Override
    public String generateFlightID(String flightId) {
        String currentFlight = flightId;
        if (flightId == null) {
            currentFlight = "1001";
        } else {
            int in = 1001;
            for (Flight f : flightList) {
                int tempInt = Integer.parseInt(f.getFlightId());
                if (in == tempInt) {
                    in++;
                }
            }
            currentFlight = String.valueOf(in);
        }
        return currentFlight;
    }

    @Override
    public void addFlight(String flightId, String airlines, String source, String destination, Double fare, Integer seatCount) {
        Flight flight = new Flight();
        flight.setFlightId(generateFlightID(flightId));
        flight.setAirlines(airlines);
        flight.setSource(source);
        flight.setDestination(destination);
        flight.setFare(fare);
        flight.setSeatCount(seatCount);
        flightList.add(flight);
        fri.store(flight); // 存入模拟数据库Map
    }

    public void searchFlight(String flightInfo) {
        fri.search(flightInfo);
    }

    // 其他CRUD方法按需实现
}

4. 确认FlightService接口定义

确保FlightService接口存在并声明对应方法:

package com.tbonegames.services;

public interface FlightService {
    String generateFlightID(String flightId);
    void addFlight(String flightId, String airlines, String source, String destination, Double fare, Integer seatCount);
    // 其他方法声明按需补充
}

验证修复效果

启动应用后,Spring会自动扫描所有标记了注解的组件,FlightServiceImpl的构造方法能成功注入FlightRepositoryImpl,调用addFlight方法后数据会存入FlightRepositoryImpl的Map中,实现模拟CRUD操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:42:46