Witam
uczę się springa i kojarzę jak działa np autowired ale mam problem z @Bean
chodzi mi o użycie w spring 4 możemy zrobić klasę zawierającą konfiguracje
i tam zamieścić definicje beanów właśnie oznaczając metody adnotacją @Bean.
Rozumiem, że wtedy spring utworzy mi takiego beana jak tam podam i doda mi go to kontextu także będę mógł z niego korzystać w aplikacji. To z czym mam problem to jakie beany w ten sposób powinienem definiować.
Wydaje mi się, że chodzi o beany z jakichś biblotek z których chcę korzystać i jeśli tak to w pliku konfiguracyjnym do tych beanów dodaje odpowiednią konfigurację -> parametryzuję te beany z bibliotek pod moją aplikację.
czy dobrze to rozumiem?
0
0
Tak.
0
Nie wiem czy dobrze zrozumiałem o co Ci chodzi więc wklejam przykład:
@Bean(name = "dataSource")
public DataSource dataSource(){
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost/expenses_manager");
dataSource.setUsername("java");
dataSource.setPassword("...");
return dataSource;
}
Jest to Bean DataSource który służy do konfiguracji połączenia z bazą danych. Nie jest to klasa stworzona przeze mnie więc tylko ją dostosowuję.
Klasy które sam tworze oznaczam jako @Repository/@Service/@RestController czy @Component - one wtedy są automatycznie dodawane do contextu Springa podczas skanowania
0
Pomyśl o @Bean jako o factory pattern. To coś co pozwala powiedzieć kontenerowi DI w jaki sposób ma stworzyć obiekt, który będziesz wstrzykiwał (@Autowired / @Inject).
https://spring.io/blog/2011/08/09/what-s-a-factorybean
Po co? Łatwiej pisać testy dla takiej fabryki niż dla konstruktora (mniej zależności między klasami).