Ich habe eine Eltern-Bean-Factory und möchte einen BeanPostProcessor darin, Process-Beans in untergeordneten Fabriken zu veröffentlichen. AFAIK, dies wird im Frühjahr nicht unterstützt. Was sind meine Alternativen? (außer natürlich, den Postprozessor in der XML jeder untergeordneten Fabrik zu deklarieren)Bean-Post-Prozessoren in der Mutter-Bean-Factory abrufen, um Beans in untergeordneten Fabriken zu verarbeiten
5
A
Antwort
0
Eine "Lösung" besteht darin, einen Bean-Post-Prozessor zu dem Kindkontext hinzuzufügen, der die übergeordneten Postprozessoren ausführt. Dies ist die Technik, die wir verwendet haben. Es ist potentiell gefährlich und nicht die beste Spring Practice IMO.
/**
* A {@linkplain BeanPostProcessor} that references the BeanPostProcessors in the parent context and applies them
* to context this post processor is a part of. Any BeanPostProcessors from the parent that are {@link BeanFactoryAware} will
* have the {@linkplain BeanFactory} from the child context set on them during the post processing. This is necessary to let such post processors
* have access to the entire context.
*/
public class ParentContextBeanPostProcessor implements BeanPostProcessor {
private final Collection<BeanPostProcessor> parentProcessors;
private final BeanFactory beanFactory;
private final BeanFactory parentBeanFactory;
/**
* @param parent the parent context
* @param beanFactory the beanFactory associated with this post processor's context
*/
public ParentContextBeanPostProcessor(ConfigurableApplicationContext parent, BeanFactory beanFactory) {
this.parentProcessors = parent.getBeansOfType(BeanPostProcessor.class).values();
this.beanFactory = beanFactory;
this.parentBeanFactory = parent.getBeanFactory();
}
/** {@inheritDoc} */
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
for (BeanPostProcessor processor : parentProcessors) {
if (processor instanceof BeanFactoryAware) {
((BeanFactoryAware) processor).setBeanFactory(beanFactory);
}
try {
bean = processor.postProcessBeforeInitialization(bean, beanName);
} finally {
if (processor instanceof BeanFactoryAware) {
((BeanFactoryAware) processor).setBeanFactory(parentBeanFactory);
}
}
}
return bean;
}
/** {@inheritDoc} */
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
for (BeanPostProcessor processor : parentProcessors) {
if (processor instanceof BeanFactoryAware) {
((BeanFactoryAware) processor).setBeanFactory(beanFactory);
}
try {
bean = processor.postProcessAfterInitialization(bean, beanName);
} finally {
if (processor instanceof BeanFactoryAware) {
((BeanFactoryAware) processor).setBeanFactory(parentBeanFactory);
}
}
}
return bean;
}
}
Verwandte Themen
- 1. Zugriff auf factory_girl Fabriken in * anderen * Fabriken
- 2. Xslt, um Bankkontotransaktion zu verarbeiten
- 3. Instanz des untergeordneten Objekts in iframe abrufen
- 4. Methode, um freigegebene Member in untergeordneten Klassen zu überschreiben
- 5. Nur CDI-verwaltete Beans im Betrieb abrufen
- 6. Erzwingen, um kein Ereignis zu verarbeiten
- 7. Doppel-For-Schleife um Daten zu verarbeiten?
- 8. Abrufen aller untergeordneten Site-Spalten
- 9. bester Weg, um Daten zu verarbeiten Attribute in dünnen
- 10. Immutable Beans in Java
- 11. ef7 kann die untergeordneten Objekteigenschaften des untergeordneten Objekts nicht abrufen
- 12. Singleton Fabriken in Factory_Girl/Maschinist?
- 13. Attribute des untergeordneten Objekts abrufen
- 14. Wie Ninject verwenden, um Instanzen in untergeordneten Klassen zu erstellen?
- 15. Überbrückende Beans in Integrationstests
- 16. Nicht in der Lage, Xml in Schwein zu verarbeiten
- 17. Verschieben von JSF Managed Beans zu Spring Beans
- 18. Sollten wir Faker in Rails Fabriken verwenden?
- 19. Automatisches Anfordern von Bereichs-Beans in Anwendungs-Bereichs-Beans
- 20. Config Probleme mit Fabriken in app.js & stateProvider
- 21. wie man Daten von den Fabriken zu Dienstleistungen in Restapi
- 22. Wie JavaScript Blob in Python zu verarbeiten?
- 23. Was ist der beste Weg, HTML in Python zu verarbeiten?
- 24. Nicht in der Lage Antwort zu verarbeiten von template.convertSendAndReceive() empfangen
- 25. Heroku ist nicht in der Lage, Web-Socket zu verarbeiten
- 26. ändern Fabriken Weg in Laravel 5.2
- 27. Wie grundlegende Befehlszeilenargumente in Bash zu verarbeiten?
- 28. Was ist der beste Weg, um ein Bild in Clojure zu verarbeiten?
- 29. Was ist der beste Weg, um eine asynchrone Warteschlange kontinuierlich in Java zu verarbeiten?
- 30. ejb TimerService.getAllTimers() Ziel-Beans?
Mir sind keine anderen Alternativen bekannt, abgesehen davon, dass ich Eltern-Kind-Kontexte sparsamer verwende. – skaffman