Dies ist ein künstliches Beispiel, aber es illustriert meine Frage. Ich möchte eine benutzerdefinierte DynamoDBMarshaller<T>
zu Marshall/unmarshall meine Objekte zu/von der Datenbank erstellen. Es benötigt die Spring-Bean CustomMarshaller
, die nach der Instanziierung in die MyAttributeMarshaller-Klasse eingefügt werden muss. Da diese Klasse jedoch über die Annotation @DynamoDBMarshalling() erstellt wird, wird sie nicht von Spring verwaltet. Gibt es eine Möglichkeit, meine CustomMarshaller-Spring-Bean in der MyAttributeMarshaller-Klasse verfügbar zu machen?Wie kann eine Spring Bean in eine Implementierung von DynamoDBMarshaller <T> injiziert werden?
@DynamoDBTable(tableName = "MyTable")
public class ObjectInTable
{
@DynamoDBAttribute(attributeName = "myAttribute")
@DynamoDBMarshalling(marshallerClass = MyAttributeMarshaller.class)
public MyAttribute getMyAttribute() { ... }
public MyAttribute setMyAttribute(MyAttribute o) { ... }
}
Und meine marsher Klasse ..
@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 **
ich eine Lösung gefunden, indem zuerst ein Spring-Bean zu funktionieren scheint:
@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;
}
}
Und dann Abrufen meiner Custom Marshaller in der Non-Spring verwaltet MyAttributeMarshaller
von:
private CustomMarshaller marshaller = (CustomMarshaller)
SpringContext.getApplicationContext().getBean("customMarshaller");