mam Wiosna fasoli, powiedzmy:Czy można zrezygnować z obsługi Spring bean?
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class AImpl implements A {
public void setSomeDependency(D dependency) {
// This setter DOES NOT BELONG to interface A
}
}
<bean id="aImpl" class="AImpl"/>
Teraz chcę przetestować integracji, ale najpierw muszę kpić zależność D
, ponieważ ma zbyt wiele rzeczy. Ponieważ AImpl
implementuje interfejs i zawiera transakcyjnej adnotacji, wygenerowany proxy jest kompatybilny tylko z interfejsem A
, więc mogę to zrobić:
@Inject @Named("aImpl")
private A a;
ale nie może:
@Inject @Named("aImpl")
private AImpl a;
W rezultacie, Nie mogę kpić z mojej zależności.
Należy pamiętać, że dodanie void setSomeDependency(D dependency)
do interfejsu A
nie jest opcją, ponieważ nie ma żadnego znaczenia biznesowego. Ani nie używa on proxy-target-class="true"
, ponieważ łamie wiele innych komponentów bean (ten atrybut dotyczy wszystkich komponentów w kontekście).
Czy istnieje sposób na odblokowanie wstrzykniętej fasoli A
, aby można było przesłać ją do AImpl
?
możliwy duplikat [Casting wiosennego Proxy obiektu do rzeczywistej klasy środowiska wykonawczego] (http://stackoverflow.com/questions/5976247/casting-a-springs-proxy-object-to-tact--ualual-rime-class) – skaffman
@skaffman: dzięki za wskazanie, dodałem to pytanie do tagu wiosna FAQ –