Spring AOP problem z dodawaniem interfejsu do joint point.

0

Oglądam tutorial "cave of programming" i koleś mówi o tym, że jak dorzucamy interfejs do klasy która ma joint pointy to spring nie pozwala potem na konwersję na tę klasę, bo ona się robi jakimś tam proxy czyli jakąś tam nową klasą, która nie jest instancją tej pierwotnej. Czyli tak o:

public class Camera {
	
	public Camera() {
		System.out.println("Constructor.");
	}
	
	public void snap() {
		System.out.println("SNAP!");
	}

}
@Aspect
@Component
public class Logger {

	@Before ("execution(void com.julian.spring.aop.Camera.snap())")
	public void aboutToTakePhoto() {
		System.out.println("About to take the photo...");
	}

}

i dopiszę implements MyInterface to ma nie zadziałać to:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/julian/spring/aop/beans.xml");
		Camera camera = (Camera) context.getBean("camera");
		camera.snap();
		context.close();

ALE MI WSZYSTKO DZIAŁA.

Koleś pokazywał rozwiązanie: dopisanie do springowego xml: <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy> albo zadeklarowanie wszystkich metod w tym interfejsie dodanym.

A mi działa bez tego rozwiązania, Czy w nowych wersjach springa problem już nie występuje?

0

Nie joint pointy tylko, JOIN POINT. Skumaj różnicę :)
Mam wrażenie, że nie rozumiesz jak działa ten mechanizm z tą klasą pośredniczącą. Zobacz sobie Spring in Action tam jest to na rysunkach wytłumaczone.

BTW. Dlaczego się uczysz na tych bolesnych XMLach?

0

Chyba coś pomieszałeś, ale nie wiadomo co, bo nie dałeś linku do oryginału. Całego kodu też nie widzimy. Czy to w ogóle ma coś wspólnego z aop? Proxy jest rzutowalne na klasę bazową, jak każda klasa pochodna.

2

Hmm @Julian_ ten XML który koleś każe dodawać, to jest do forsowania użycia CGLIB zamiast JDK Dynamic Proxy. Ale bez tego Spring sam sobie ogarnie, co i jak:

If the target object to be proxied implements at least one interface then a JDK dynamic proxy will be used. All of the interfaces implemented by the target type will be proxied. If the target object does not implement any interfaces then a CGLIB proxy will be created.

source: https://docs.spring.io/spring/docs/5.0.7.RELEASE/spring-framework-reference/core.html#aop

1 użytkowników online, w tym zalogowanych: 0, gości: 1