当前位置: 首页 > 知识库问答 >
问题:

Spring @Configurable类不能自动连接其依赖项的问题

公羊雅达
2023-03-14

我正在尝试为我的Spring Boot应用程序配置加载时编织,以正确地自动连接对< code>@Configurable java类的依赖。

下面是我的配置/主类:

package com.bignibou;

@Configuration
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ThymeleafAutoConfiguration.class, FlywayAutoConfiguration.class })
@EnableSpringConfigured
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
@ComponentScan
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

以下是我如何启动应用程序(我的 gradle 版本重命名为 spring-instrument jar):

java -javaagent:build/lib/springinstrument.jar -jar myapp.jar

下面是@Configurable个不自动连接其依赖项的类:

package com.bignibou.converter;

@Configurable
public class StringToDayToTimeSlotConverter implements Converter<String, DayToTimeSlot> {

    @Autowired
    private DayToTimeSlotRepository dayToTimeSlotRepository;//NOT AUTOWIRED!!

    @Override
    public DayToTimeSlot convert(String id) {
        return dayToTimeSlotRepository.findOne(Long.parseLong(id));//NPE HERE!!
    }

}

这里的类被实例化(<鳕鱼

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.bignibou.controller" }, useDefaultFilters = false, includeFilters = { @Filter(type = FilterType.ANNOTATION, value = Controller.class),
        @Filter(type = FilterType.ANNOTATION, value = ControllerAdvice.class) })
@Import(ApplicationControllerAdvice.class)
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    ...

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new DayToTimeSlotToStringConverter());
        registry.addConverter(new StringToDayToTimeSlotConverter());//INSTANTIATED HERE!
        registry.addConverter(new LanguageToStringConverter());
        registry.addConverter(new StringToLanguageConverter());
        registry.addConverter(new AddressToStringConverter());
        registry.addConverter(new StringToAddressConverter());
        super.addFormatters(registry);
    }

谁能请帮助弄清楚为什么<代码>字符串

共有1个答案

邓英卓
2023-03-14

非常老的问题,至少有一个解决方案的建议,我会把它变成一个答案,这样问题就可以“关闭”了。将< code > StringToDayToTimeSlotConverter 转换为Bean,如下所示:

@Bean
public class StringToDayToTimeSlotConverter implements Converter<String, DayToTimeSlot> {

    @Autowired
    private DayToTimeSlotRepository dayToTimeSlotRepository;

    @Override
    public DayToTimeSlot convert(String id) {
        return dayToTimeSlotRepository.findOne(Long.parseLong(id));
    }
}

WebMvc配置中注入所有可用的转换器,如下所示:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.bignibou.controller" }, useDefaultFilters = false, includeFilters = { @Filter(type = FilterType.ANNOTATION, value = Controller.class),
        @Filter(type = FilterType.ANNOTATION, value = ControllerAdvice.class) })
@Import(ApplicationControllerAdvice.class)
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    @Autowired
    List<Converter> converters;

    @Override
    public void addFormatters(FormatterRegistry registry) {
        for (Converter converter : converter) {
            registry.addConverter(converter);
        }
        super.addFormatters(registry);
    }
}
 类似资料:
  • 我正在开发一个具有可重用逻辑的公共java库,以与一些AWS服务交互,这些服务将依次被多个消费者应用程序使用。出于这里概述的原因,以及Spring Boot似乎为SQS集成之类的东西提供了大量无模板代码的事实,我决定将此公共库实现为具有自动配置的定制Spring Boot启动器。 我也是Spring框架的新手,因此遇到了一个问题,即我的自动配置类的实例变量没有通过AutoWired注释进行初始化。

  • 问题内容: 我正在开发一个小型Java EE Hibernate Spring应用程序,出现错误: 这是我的控制器ArticleControleur,其中包含用于恢复文章列表的功能: 这是我的articleService: 这是我的应用程序上下文: 问题答案: 该错误表明不是注册的Bean。添加其中包含将在你的应用程序上下文中自动装配的bean的软件包: 或者,如果你想将所有子包包括在com.bd

  • 大家好,我收到下一个错误,我是使用Hibernate的新手

  • 这是我的当前设置:ProjectRepo: ProjectService: ProjectRestController:

  • 通过Intellij执行的Spring Boot测试运行良好。但是当我用Maven运行测试时,它们失败了。 我使用这个Maven测试命令: 在surefire插件报告中找到的原因: ------------------------------------------------------------------------- 测试集:com.miro.project.controllers.Pr

  • 和我的配置类: 1)AppConfig。 2)AppInitializer: 不幸的是同样的结果: 找不到依赖项得[Kamienica.Service.CustomUserDetailsService]类型得合格bean:需要至少1个具有此依赖项自动候选资格得bean.依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(re