我是spring框架的新手,并试图在我的独立java库中使用spring框架进行依赖注入,该库由2个客户端使用
我正在声明我的bean,我想注入ObjectMapper
package com.my.package.search.modules
@Component
public class ModuleProvider {
@Bean
public ObjectMapper getObjectMapper() {
return new ObjectMapper().enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
}
}
我的班级使用它
@Slf4j
@ComponentScan(basePackages = {"com.my.package.search"})
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ConfigurationProcessor {
private ObjectMapper objectMapper;
@SneakyThrows
public void processTheme(String name) {
String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
Car car = objectMapper.readValue(json, Car.class);
System.out.println("all gg" + car);
}
}
我正试着从
@Slf4j
public final class SomeCaller {
//Some caller method is triggering this
public void callConfig() {
new ConfigurationProcessor().processTheme(null);
}
}
我得到空指针异常
Car car = objectMapper.readValue(json, Car.class);
objectMapper -没有被注入,并且它是空的
我试着按照我从互联网上得到的例子,如https://www.baeldung.com/spring-component-annotation
PS:我知道这不是在库中集成DI的最佳实践。在这种情况下,两个客户端服务都是我自己拥有的。
编辑:1
我按照建议做了一些改变,但没有奏效
@Component
@Configuration
public class ModuleProvider {
@Bean
public ObjectMapper getObjectMapper() {
return new ObjectMapper().enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
}
}
2条答案
按热度按时间oprakyz71#
您需要使用配置为ObjectMapper创建配置。
然后在配置处理器类中自动连接对象Map器。
这应该会将objectMapper对象注入到上下文中。
iszxjhcz2#
根据您提供的代码,似乎您正在TestSpring类中使用new关键字手动创建ConfigurationProcessor的示例。当您以这种方式创建一个对象时,Spring并不知道它,因此,它不会对该对象执行依赖注入。
要解决这个问题,一个解决方案是检索ConfigurationProcessor bean,并让spring处理依赖注入。这里有一个例子。
还有其他的解决方案。你可以试着看看哪一个最适合你的情况。这里有一些关键词:SpringBootTest、TestConfiguration或Mockito。