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提供的)