Home » Spring
Archiv der Kategorie: Spring
Einfache SPRING-MVC Web-Anwendung (Frank Hahn)
https://www.frank-rahn.de/spring-mit-einer-einfachen-webanwendung/
Spring AOP Proxy – Auf ein durch Proxy vertretenes Objekt zugreifen
Spätestens sobald eine Spring-Component mit einer Annotation für Caching, Transaktionen oder AOP versehen ist, baut Spring einen Proxy davor.
!Spring baut keinen Proxy for ein jedes dependency injected Bean!
Die Referenz auf das Object, das man sich von Spring „autowiren“ liess, z.B.
@Autowired private MeineSpringComponent meineSpringComponent;
lässt ist dann der Proxy.
Um auf das reale Objekt zuzugreifen ist folgender Code nötig:
public static <T> T getTargetObject(Object proxy) { if (AopUtils.isCglibProxy(proxy) || AopUtils.isAopProxy(proxy)) { try { return (T) ((Advised) proxy).getTargetSource().getTarget(); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); return null; } } else { return (T) proxy; } }
Der code prüft zuerst ob es sich um einen Spring-Proxy handelt und gibt, wenn es so ist das dahinter stehende Objekt zurück, wenn nicht jedoch das Input-Objekt selbst.
Wenn man nun also z.B. via Reflection auf ein Feld von meineSpringComponent zugreifen möchte tut man das so:
org.springframework.test.util.ReflectionTestUtils.setField(AOPUtilsHelper.getTargetObject(meineSpringComponent), „nameDesFelds“, „neuer Wert des Feldes“);
[/java]
Reference: Transactions Caching and AOP – Understanding Proxy Usage in-Spring