【歸納】springboot中的IOC注解:注冊bean和使用bean


目前了解的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容器

 

2. 使用bean:@Autowired、@Resource

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

 

 

 

示例:

注冊bean

@Configuration
public
class MyBeans { @Bean("autowire") public Integer autowire_bean(){ return 1; } @Bean("resource_name1") public String resource_bean1(){ return "this is resource_bean1"; } @Bean("resource_name2") public String resource_bean2(){ return "this is resource_bean2"; } }

使用bean:

@RestController     //@RestController與@Controller有關
public class MyController {

    //@Autowired默認按類型注入,如果同一類型有多個bean就報錯
    @Autowired
    private Integer autowire_bean;

    //@Resource支持name注入或type注入,或同時指定兩者注入(需同時滿足name和type)
    @Resource(name = "resource_name1")
    private String resource_bean1;

    @Resource(name = "resource_name2",type = String.class)
    private String resource_bean2;



    @GetMapping("/autowire_bean")
    public String getAutowire_bean(){
        return "autowire_bean: " + autowire_bean + "<br>resource_bean1: "
                + resource_bean1 + "<br>resource_bean2: " + resource_bean2;
    }

}

  

  結果:


免責聲明!

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



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