2013-03-22 9 views
15

Im używam Jersey Rest i chcę filtr Jersey mieć dostęp do niektórych fasoli szparagowej.Używanie proxy-target-class = "true" z fasolą Spring

Jednak jak odkryłem z innych wątków, Jersey nie otrzymuje Spring bean, jeśli są one serwerami proxy Java w przeciwieństwie do generowanych proxy java. Chcę dodać proxy-target-class = "true"

Jakie są tego skutki, a może to być ustawione na pojedynczym komponencie bean lub musi być ustawione na wszystkich odnośnikach?

Odpowiedz

22

Przez ustawienie proxy-target-class="true" użyjesz CGLIB2 dla swoich serwerów proxy zamiast serwerów proxy jdk.

Wnioski są następujące, jak opisano w DE documentation:

  • metody końcowe nie może być poinformowany, ponieważ nie mogą być nadpisane.

  • Potrzebne będą pliki binarne CGLIB 2 w ścieżce klas, podczas gdy dynamiczne serwery proxy będą dostępne w JDK. Wiosna automatycznie wyświetli ostrzeżenie, gdy będzie potrzebować CGLIB, a klasy biblioteki CGLIB nie będą znajdować się w ścieżce klasowej .

  • Konstruktor twojego obiektu docelowego zostanie wywołany dwa razy. Jest to naturalną konsekwencją modelu proxy CGLIB, w którym generowana jest podklasa dla każdego obiektu proxy. Dla każdej instancji proxy tworzone są dwa obiekty: rzeczywisty obiekt proxy i instancja podklasy implementująca porady. To zachowanie nie jest wyświetlane podczas korzystania z serwerów proxy JDK. Zwykle wywoływanie konstruktora typu proxy dwukrotnie, nie stanowi problemu, ponieważ zwykle wykonywane są tylko przypisania , a konstruktor nie implementuje prawdziwej logiki.

Ponadto, należy być w stanie dokonać "target-proxy" dla konkretnego komponentu za pomocą

proxyMode=ScopedProxyMode.TARGET_CLASS 
+1

Należy pamiętać, że jest to błąd, aby utworzyć proxy AOP o zasięgu do singleton fasoli. –

+0

To był przykład. Edytowane w celu uniknięcia zamieszania. – gargc

+0

, ale jak dokładnie ustawić ją na fasoli? Na przykład nie powiedzie się narzekać na pojawienie się docelowego adresu proxy – cduggan

12

Zmuszanie CGLib-proxy choć kontroler formalnie implementuje interfejs (SpringBoot 1.2.3.RELEASE z wiosennym 4.1.6.RELEASE):

@Controller 
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) 
public class ServiceImpl implements ServiceIntf 
{ .... } 

umożliwia to ważny i pracy @RequestMapping i @Transactional adnotacje

4

Użyj poniższej adnotacji w klasie Java Wiosna config:

@EnableAspectJAutoProxy (proxyTargetClass = true)

+0

oh jego cool ......... zapisałeś me @ rcde0 – pk4393

Powiązane problemy