gpt4 book ai didi

java - 如何将 Spring bean 注入(inject) DynamoDBMarshaller 的实现中?

转载 作者:行者123 更新时间:2023-12-02 12:38:55 24 4
gpt4 key购买 nike

这是一个人为的例子,但它说明了我的问题。我想创建一个自定义 DynamoDBMarshaller<T>将我的对象编码到数据库/从数据库中解码。它需要 CustomMarshaller Spring bean,实例化后需要注入(inject)到 MyAttributeMarshaller 类中。但是,由于此类是通过 @DynamoDBMarshalling() 注释创建的,因此它不受 Spring 管理。有没有办法让我的 CustomMarshaller spring bean 在 MyAttributeMarshaller 类中可用?

@DynamoDBTable(tableName = "MyTable")
public class ObjectInTable
{
@DynamoDBAttribute(attributeName = "myAttribute")
@DynamoDBMarshalling(marshallerClass = MyAttributeMarshaller.class)
public MyAttribute getMyAttribute() { ... }
public MyAttribute setMyAttribute(MyAttribute o) { ... }
}

还有我的 marsher 类(class)..

@Named
public class MyAttributeMarshaller implements DynamoDBMarshaller<MyAttribute>
{
@Override
public String marshall(MyAttribute o)
{
return marshaller.marshall(o);
}
@Override
public ProviderContentReference unmarshall(Class<ProviderContentReference> clazz, String obj)
{
return marshaller.unmarshall(o);
}
@Inject
private CustomMarshaller marshaller; // ERROR: null
}

** 更新 **

我找到了一个似乎可以通过首先创建 Spring bean 来工作的解决方案:

@Named
public class SpringContext implements ApplicationContextAware
{
private static ApplicationContext context;

public void setApplicationContext(ApplicationContext context) throws BeansException
{
this.context = context;
}
public static ApplicationContext getApplicationContext() {
return context;
}
}

然后在非 Spring 管理的 MyAttributeMarshaller 中检索我的自定义编码器作者:

private CustomMarshaller marshaller = (CustomMarshaller)
SpringContext.getApplicationContext().getBean("customMarshaller");

最佳答案

恐怕不是。您要求 DynamoDB 使用该编码器类的特定实例,该实例已由 Spring 通过 CustomMarshaller 注入(inject)。

您可以将 CustomMarshaller 实例放在静态位置/字段中,然后从 MyAttributeMarshaller 中获取它,但这是一个盲目的尝试,因为发布的代码不足以确定

关于java - 如何将 Spring bean 注入(inject) DynamoDBMarshaller<T> 的实现中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com