0

Ich habe die folgende Definition im Code zu sehen:Gibt es einen Grund, eine Singleton-Bean zu proxysen?

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) 
@Component 
public class SomeComponent { 
    <...> 
} 

Dies ist ein Singleton Bohne scoped. Und es scheint für mich, dass es keinen Grund gibt, es zu vertreten. Soweit ich es verstehe, sollten wir eine Bean proxy machen, falls ihr Scope nicht Singleton ist und sich vom Umfang einer anderen Bean unterscheidet, in die wir sie injizieren wollen.

Wahrscheinlich weiß ich etwas nicht. Was könnte ein Grund sein, einen Singleton zu vertreten?

Antwort

0

Nach einer Untersuchung fand ich eine Antwort auf meine Frage in an outdated Spring's documentation:

Sie brauchen nicht die <aop:scoped-proxy/> in Verbindung mit Bohnen zu verwenden, die als Singletons oder Prototypen scoped sind. Es ist ein Fehler zu versuchen, einen Bereichs-Proxy für eine Singleton-Bean zu erstellen (und der resultierende BeanCreationException wird Sie sicherlich in dieser Hinsicht gerade setzen).

Es beantwortet meine Frage, denn <aop:scoped-proxy/> ist eine Alternative für @Scope Annotation. Aber current documentation unterscheidet sich von der alten:

Sie auch <aop:scoped-proxy/> zwischen Bohnen verwenden, die als Singleton scoped, mit der Referenz dann durch einen Zwischen Proxy gehen, die serializable und daher in der Lage ist, um das Ziel Singleton Bohne wieder zu erhalten auf Deserialisierung.

Es bedeutet, jetzt Sie nicht BeanCreationException im Fall sehen, wenn Sie ein Singleton Proxy-scoped zu definieren versuchen. Aber ich verstehe den Zweck dieses vagen Anwendungsfalls nicht ganz. Also, wenn jemand versteht, was diese Aussage bedeutet, bitte, erklären Sie es in den Kommentaren.

Fazit: In den meisten Fällen gibt es keinen Grund, eine Singleton Scoped Bean zu übertragen.

0

In Bezug auf die scoped proxy: das ist, was in Spring documentation geschrieben

Note: 


    You do not need to use the <aop:scoped-proxy/> in conjunction with beans that are scoped as singletons or prototypes. It is an error to try to create a scoped proxy for a singleton bean (and the resulting BeanCreationException will certainly set you straight in this regard). 

Obwohl es eine ziemlich alte Version bezieht, aber die Note IMO noch gültig ist. Ich habe das selbst nie versucht.

Nachdem gesagt, dass es eine Menge Gründe geben kann, die Singleton-Bean zu Proxy-Proxy ist ein sehr weit gefasstes Konzept. Wenn wir zum Beispiel @Transactional als Proxy verwenden, gibt es viele andere Beispiele. Die Sache ist, dass dies kein "Bereichs-Proxy" ist, der als eine sehr spezifische Art von Proxy behandelt werden kann, die offensichtlich nicht für Singletons anwendbar ist.

Hoffe, das hilft

Verwandte Themen