Java控制器中自动装配静态内部类失败,如何解决?
解决Spring中静态内部类自动装配失败的问题
问题根源
你的静态内部类A.B没有被Spring容器识别并管理,容器中不存在该类的实例,因此控制器C尝试注入时会抛出Unsatisfied Dependency错误。
解决方案
方法一:给静态内部类添加组件注解
直接给A.B添加@Component(或@Service、@Repository等符合业务场景的注解),让Spring组件扫描时将其注册为Bean:
class A{ public void methodA(){} @Component public static class B{ public void methodB(){} } } @Controller class C { private final A.B ab; // Spring 4.3+ 版本中,构造方法注入可省略@Autowired C(A.B ab){ this.ab=ab; } }
注意:需确保Spring的组件扫描范围包含类A所在的包,否则无法扫描到B类。
方法二:在配置类中手动注册Bean
若不想给B添加组件注解,可在配置类中通过@Bean方法手动注册A.B的实例:
@Configuration public class AppConfig { @Bean public A.B bInstance() { return new A.B(); } }
静态内部类无需依赖外部类A的实例即可创建,因此直接new A.B()即可完成实例化。
内容的提问来源于stack exchange,提问作者cp0202
相关产品推荐
相关产品推荐

