Почему методы @Bean проксируются, а методы компонента отсутствуют в Spring? - PullRequest
0 голосов
/ 07 февраля 2020

Рассмотрим простые 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 больше не действителен, потому что что-то изменилось, и я просто не знаю об этом?

...