これは人為的な例ですが、私の質問を示しています。データベースとの間でオブジェクトをマーシャリング/アンマーシャリングするためのカスタムDynamoDBMarshaller<T>
を作成します。 CustomMarshaller
Spring Beanが必要です。インスタンス化された後、MyAttributeMarshallerクラスに注入する必要があります。ただし、このクラスは@DynamoDBMarshalling()アノテーションによって作成されるため、Springで管理されません。 CustomMarshallerスプリングBeanをMyAttributeMarshallerクラスで使用できるようにする方法はありますか? ** DynamoDBMarshallerの実装にSpring Beanを挿入する方法<T>?
@DynamoDBTable(tableName = "MyTable")
public class ObjectInTable
{
@DynamoDBAttribute(attributeName = "myAttribute")
@DynamoDBMarshalling(marshallerClass = MyAttributeMarshaller.class)
public MyAttribute getMyAttribute() { ... }
public MyAttribute setMyAttribute(MyAttribute o) { ... }
}
そして、私のmarsherクラス..
@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
}
UPDATE **
私は最初の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;
}
}
その後、Non-Springで管理されているカスタムマーシャラーを取得MyAttributeMarshaller
by
private CustomMarshaller marshaller = (CustomMarshaller)
SpringContext.getApplicationContext().getBean("customMarshaller");