- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是 Jackson 自定义序列化器,已知该序列化器不支持 Spring 依赖项注入(inject),因此我的序列化器类如下:
public class ShippingAddressDataSerializer extends JsonSerializer<ShippingAddressData> {
/** Jackson serializers don't support Spring dependency injection */
private CalculatedSettingsService calculatedSettingsService =
(CalculatedSettingsService) Registry.getApplicationContext().getBean("calculatedSettingsService");
@Override
public void serialize(ShippingAddressData addressData, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("id", addressData.getId());
CalculatedSettings calculatedSettings = getCalculatedSettingsService()
.getSettingsForCurrentUser(SettingType.REQUIRE_COUNTY);
if (calculatedSettings.getIsCountyRequired()) {
jsonGenerator.writeStringField("county", addressData.getCounty());
}
jsonGenerator.writeEndObject();
}
public CalculatedSettingsService getCalculatedSettingsService() {
return calculatedSettingsService;
}
public void setCalculatedSettingsService(CalculatedSettingsService calculatedSettingsService) {
this.calculatedSettingsService = calculatedSettingsService;
}
}
我在对此类进行单元测试时遇到问题,因为我不知道如何提供 calculatedSettingsService
的模拟版本。
单元测试不断尝试启动我的应用程序上下文,但出现以下错误:
java.lang.IllegalStateException: Can not activate tenant <<master>> since it has no application context created
最佳答案
您可以使用 Spring Autowiring JsonSerializer
。但你必须使用SpringBeanAutowiringSupport 。只需在构造函数中调用它,Spring 就会 Autowiring 依赖项。
public class ShippingAddressDataSerializer extends JsonSerializer<ShippingAddressData> {
@Autowired
private CalculatedSettingsService calculatedSettingsService;
public ShippingAddressDataSerializer() {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
// ...
}
然后在测试中,您必须使用模拟依赖项准备 Spring 上下文,以便可以对其进行 stub 。
当您无法使其成为 Spring 托管 Bean 时,其他选择是不使用 Autowiring 并在构造函数中请求 CalculatedSettingsService
。无论如何,你必须注册你的自定义序列化器,这可能是在某些 Spring 配置文件中完成的。您可以在那里手动进行接线。使用这样的构造函数,测试将变得微不足道。
这是此类配置的草稿。
@Configuration
public class JacksonConfiguration {
@Bean
public ObjectMapper objectMapper(final CalculatedSettingsService calculatedSettingsService) {
final ObjectMapper mapper = new ObjectMapper();
final SimpleModule module = new SimpleModule();
module.addSerializer(ShippingAddressData.class, new ShippingAddressDataSerializer(calculatedSettingsService));
mapper.registerModule(module);
return mapper;
}
}
关于java - 对使用 getBean ("myService"的依赖项的类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652649/
我使用的是Spring3.1 我已经以编程方式注册了一个 Bean,我也想以编程方式检索它,但没有成功。 public void createBean(String beanName, String
我正在使用方法ApplicationContext.getBean(String name, Class requiredType)。该 bean 的类型为 util:set。我的代码如下所示: Se
getBean() 方法在这里做什么,它在程序中如何工作? ApplicationContext aplicntxt = new ClassPathXmlApplicationContext("spr
我正在使用方法 ApplicationContext.getBean(String name, Class requiredType)。 bean 的类型为 util:set。我的代码如下: Set
我有一个界面 @Component("a") @Scope("prototype") Public interface A{ ..... } 和实现接口(interface)a的b类 public c
我不明白为什么我的集成测试会抛出异常。 集成测试## package sample import grails.test.mixin.* import org.junit.* /** * See t
当我使用 getBean("test") 我有一门课 @Component public class TEST { } 这个 bean 可以加载吗? 最佳答案 getBean() 是区分大小写的,但是
这里我有一个名为 RegionsServiceImpl 的带有 @Service 的主类。我正在使用 ApplicationContext.getBean 对其进行初始化,但我想使用 @Autowir
我使用的是 Jackson 自定义序列化器,已知该序列化器不支持 Spring 依赖项注入(inject),因此我的序列化器类如下: public class ShippingAddressDataS
我正在浏览 spring 文档,并发现了以下声明 - You can then use getBean to retrieve instances of your beans. The Applica
我有一个 Spring Boot 应用程序。当我调用 context.getBean(MyController.class) 时,它工作正常。当我调用 context.getBean("MyContr
由于依赖注入(inject)意味着控制反转,因此我在以下调用中看不到 IOC: Car car = (Car)ApplicationContext.getBean("car"); 这不是 Spri
ReadOnlyProperty.getBean() 的 Javadoc 是这样说的: Object getBean() Returns the Object that contains this p
我正在尝试从 Solr 转到 Elasticsearch,我一直在将我使用 Solr 工作的一些类转换为 Elasticsearch,但现在我陷入了困境。 在 Solr 中我曾经有: QueryRes
在一个spring应用中,我们是这样写的,通过手动加载spring应用上下文来获取一个bean。 ApplicationContext context = new ClassPathXmlApplic
我有一个类 Bar 实现如下: class Bar implements ApplicationContextAware { ApplicationContext applicationCon
我在我的应用程序中使用 SpringBoot,目前正在使用 applicationContext.getBean(beanName,beanClass) 在执行操作之前获取我的 bean。我在几个问题
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Job job = ctx.g
我在 Spring 中有一个 bean 定义,它是代理对应物,可以在任何地方使用: someInterceptor 一切正常;在
我正在使用 JSF + Spring+ Hibernate protected @Inject ChartOfAccount chartOfAccount; 我基本上想从列表中填充 chartOfAc
我是一名优秀的程序员,十分优秀!