IOC

IoC - Inversion of Control 控制反转 - 对象的创建控制权 由程序自身转移到外部(容器)(一种设计思想,将设计好的对象交给第三方托管)

DI - Dependency Injection 依赖注入 - 容器为应用提供 依赖的资源

bean - IOC 容器中 创建、管理的对象

IOC 注解

@Conponent IOC 注解 - 在类上注解,此类交由 IOC 控制,即 Bean 声明

@Autowired DI 注解 - 在成员变量上注解,依赖注入,默认按照类型注入

Bean 衍生注解

@Conponent 的衍生注解:

  • @Controller
    • 标注在控制器上
    • @RestController 相当于 @Controller + @ResponseBody
    • SpringBoot Web开发中,只能用 @Controller 声明控制器Bean
  • @Service
    • 标注在业务类上
  • @Repository
    • 标注在数据访问类上
    • 由于与 mybatis 整合,用得少

一般使用衍生注解,如果不确定在哪一个类再使用 @Conponent (如一些工具类)

每个 Bean 都有名字,通过 value 属性指定,未指定默认为类名首字母小写

组件扫描,Bean扫描 (默认即可,基本不用)

@ComponentScan 组件扫描注解,被包含在启动类声明注解 @SpringBootApplication

默认扫描范围:启动类所在包 及其子包

手动指定扫描目录 需使用注解 @ComponentScan("package1", "package2") ,手动指定后会覆盖默认的注解效果

一般按照SpringBoot规范,放在启动类所在包及其子包下即可

DI 依赖注入注解

@Autowired DI 自动装配,默认按照类型注入

默认按照类型装配,找到同类型的 Bean 进行赋值;如果存在多个相同类型的 Bean 就会报错。
解决方案任选一:

  • @Primary 让谁生效就 在类上添加一个此注解
  • @Qualifier("bean名")@Autowired下添加
  • @Resource(name="beanA") 默认按照名称注入,替换@Autowired ,(JDK提供的)