之前學習Spring Boot有點囫圇吞棗的意味,沒有細究這些注解間的差異。現在空下來重新回過頭來閱讀官方文檔才對這幾個注解有了重新的理解,專門寫下來好供日后查詢翻閱。
@Configuration
指示一個類聲明了一個或多個@Bean方法,並且可以由Spring容器進行處理以在運行時為這些bean生成bean定義和服務請求。
@Configuration public class AppConfig { @Bean public FooService fooService() { return new FooService(fooRepository()); } @Bean public FooRepository fooRepository() { return new JdbcFooRepository(dataSource()); } // ... }
FooService調用的FooRepository類型對象和fooRepository()方法所返回生成的對象是同一個。因為在運行時會對@Component進行CGLIB動態代理。
@Component
在這個注解中的列也會包含一個或多個@Bean方法。用官網的話來說@Component類中的@Bean方法是lite mode。即不支持bean間引用,以上述代碼為例,獲得的對象就不再是同一個。
@Service,@Controller和@Component的區別
大致上相同,類比的話就是:@Component是一個人,@Service和@Controller擁有一項特長的人
- @Service:在處理業務邏輯的時候使用
- @Controller:處理前端請求,轉發,重定向