Рассмотрим простые 2 случая
1)
@Bean
public MyBean myBean(){
..create and return
}
@Bean
public Another anotherBean(){
new Another(myBean());
myBean();
myBean();
myBean();
}
В таком случае включится какой-то AOP (или нет?) И myBean()
будет вызываться ТОЛЬКО ОДИН РАЗ
2)
@Component
public class MyClass{
.....
@Autowired
private MyClass self;
@Transactional
public void inTx(){
}
public void doIt(){
inTx(); //this will NOT be transactional
self.inTx(); // this will
}
}
Теперь, почему эти два случая различны? Почему поведение здесь неуместно? Я был убежден, что для того, чтобы AOP весной работал, я ВСЕГДА должен использовать сценарий 2 и делать «внешний вызов» на проксируемом экземпляре. Я также думал, что сценарий 1 создаст 4 разных экземпляра.
Так в чем же разница и почему такая несогласованность?
Или, возможно, сценарий 2 больше не действителен, потому что что-то изменилось, и я просто не знаю об этом?