2009-07-22 25 views
0

Dies ist ein kurzer Abschnitt: Ich möchte die Art und Weise ändern, in der spring meine Beans instanziiert (in diesem Fall indem Sie einen Proxy erstellen, anstatt ihn einfach zu instanziieren).Erweiterung der Standardkomponente der Feder

Ich kann weder Jdk Dynamic Proxies noch cglib verwenden, um die Proxies zu generieren (wenn das der Fall wäre, könnte ich Spring AOP verwenden).

Meiner Meinung nach wäre der beste Weg, dies zu tun, Frühling Bohnenfabrik zu verlängern (und dem Frühling zu sagen, meine Fabrik zu verwenden), aber ich kann nicht finden, wie man es bei Google macht.

Irgendwelche Gedanken dazu?

edit:

Eigentlich wie die meisten Standard-Weg sieht, dies zu tun ist, eine BeanPostProcessor (http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans/factory/config/BeanPostProcessor.html) zu verwenden, und machen, dass Postprocessor die Bohne auf einem Proxy-wickeln.

Wenn wir hier nicht zu einer besseren Lösung kommen können (und wir entscheiden, dass dies eine wertvolle Frage ist), werde ich dies als Antwort veröffentlichen.

+0

Müssen ** ALL ** die Beans in Ihrem Spring-Kontext als Proxies instanziiert werden? – ChssPly76

+0

Ja, ich muss alle Beans als Proxies instanziieren. Ich muss die Proxy-Protokollierung auf alle Methodenaufrufe (und Rückgaben) anwenden, ohne die Feder-AOP-API zu verwenden (der Grund, warum ich reguläres Feder-AOP nicht verwenden kann, wird in meinem Kommentar unten erklärt). –

+0

In diesem Fall ja, BeanPostProcessor ist der Weg zu gehen. Der Grund, warum ich gefragt habe, ist, ob es nur einfacher war, FactoryBean nur für sie zu verwenden. – ChssPly76

Antwort

-1

Sie müssen nur AbstractApplicationContext erweitern.

Das ist der einfache Teil.

Der schwierige Teil, mit dem ich Probleme habe, ist: Wenn Sie keine dynamischen Proxies oder CGLIB verwenden können, welche Methode möchten Sie verwenden?

Mein Rat? Nicht. Das "besondere Bedürfnis", das Sie sich vorstellen, ist eine Fiktion, und Sie werden nicht in der Lage sein, einen besseren Weg zu finden, als Rod Johnson bereits für Sie vorgesehen hat.

Wenn Sie eine klare Erklärung veröffentlichen können, die mich überzeugt, werde ich meine Antwort löschen.

+0

Ich behalte eine große Code-Basis, die irgendwie alt ist. Ich kann CGLIB nicht verwenden, weil meine Controller-Beans keine leeren Konstruktoren haben (alle Konstruktoren sind @Autowired, um andere Controller zu injizieren) und können Dynamische Proxies nicht verwenden, weil ich keine Interfaces für alle Controller erzeugen möchte, die nur erfüllt werden müssen die Anforderung, diese Art von Proxy zu generieren (ich weiß, dass Schnittstellen von Anfang an verwendet werden sollten, aber das ist einfach nicht unsere Realität). Ich beabsichtige, einen MethodInterceptor um die Beans zu setzen, um die Methodenaufrufe abzufangen und auf Aspectual Situationen, wie Logging zu verwenden. –

+0

Jedenfalls ist es jetzt nicht meine Absicht, eine bessere allgemeine Lösung zu finden als die, die Rod Johnson zur Verfügung gestellt hat. Ich beabsichtige nur, eine passendere für meine Bedürfnisse zu finden. –

+0

-1 Wenn Sie AbstractApplicationContext erweitern, müssen Sie Implementierungen für Methoden bereitstellen, die sich mit BeanFactory befassen, die bereits in den konkreten Unterklassen implementiert sind. – ChssPly76

Verwandte Themen