SpringBoot中IOC注解


目前了解的springboot中IOC注解主要分為兩類:

1. 注冊bean:@Component和@Repository、@Service、@Controller 、@Configuration

共同之處:這些注解都使用在類上,將類標識為Bean,由Spring掃描到后會生成一個單例bean放到容器中。

不同之處在於:

  • @Component是一個泛化的概念,僅僅表示一個組件 (Bean) ,可以作用在任何層;
  • @Repository、@Service、@Controller 都包含@Component注解
@Repository 一般修飾持久層——Dao層
@Service 一般修飾服務層(或業務層)——Service層
@Controller 通常作用在控制層——Controller層
  • @Configuration,在@Component的基礎上,會對修飾的類做一個增強(利用CGLIB動態代理)。它一般用來修飾配置類——Configuration文件夾。

 

注:在類上使用以上注解后,還可以用@Bean注解修飾方法,它很明確地告訴被注釋的方法產生一個Bean,然后交給Spring容器

 !!!注意坑:

  當你使用@Bean注冊的bean給SpringBoot框架使用時,方法名必須要與接口名或者類名一致才可以生效。如果是自己注冊的bean給自己用的話就可以隨便起

// 自動裝配到SpringBoot中
    @Bean
    public LocaleResolver localeResolver() {
        return new MyLocaleResolver();
    }
// 這里 LocaleResolver 是springboot中的接口,所以方法名必須是localeResolver 不然注冊不了

  

spring-boot推薦的編程思想是約定優於配置,這些固定名字的bean名字,就是這種編程思想的體理。必須叫這些約定俗成的名字。如果你改成別的名字,程序就無法成功運行。
1、如果是給框架使用的就要用約定的名字,但如果寫出來的bean是給自己使用的,就可以隨便寫,
就比如說這里的redis2Template名字,就是因為這個bean僅僅是用來給我自己在controller調用,所以並不需要按照約定的名字寫

@Bean(name = "redis2Template")
public RedisTemplate<String, Object> redis2Template() throws Exception {}

 

2、但是像這個dataSource就是為了給框架使用的,所以不能隨便寫名字

@Bean(initMethod = "init", destroyMethod = "close")
@Primary
public DataSource dataSource() throws SQLException {}

 

 

3. 使用bean:@Autowired、@Resource

  • @Autowired與@Resource都可以用來裝配bean, 都可以寫在字段上,或寫在setter方法上
  • @Autowired默認以Type方式注入
  • @Resource默認以Name方式注入,但它可以指定為Type方式(傳Type值即可),也可以指定為Name和Type同時皆有的方式(那么必須找到一個Bean,它的Name和Type同時滿足才可以注入)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM