当我们了解完三层耦合之后,我们会发现,其中还是存在着一些问题不便于我们的修改,当我们的逻辑层名称或对象发生变化时,我们的响应层中创建逻辑层的代码需要发生变动,这里我们称逻辑层和响应层之间耦合,同理逻辑层还与数据层耦合
这里我们可以通过控制反转和依赖注入来实现,
首先,控制反转(IOC)指的是将创建的对象实体转移到外部容器中
依赖注入(DI)指的是外部容器为应用程序提供运行时所依赖的资源
我们将该外部容器称作为Bean
在代码中,我们先将创建的接口实体对象去掉赋值操作,不进行赋值,此时我们需要在相互耦合类的上面加上注解@Component,表示将该类交给IOC容器管理,然后我们需要为运行时的对象注入所依赖的对象,即在创建的实体对象上面加上注解@Autowired
但是在实际运用时,我们在控制反转中通常使用@Component注解的衍生类,分别为
@Controller标注在控制器类上 在@RestController注解中包含了该注解,所以一般不用手动添加
@Service标注在业务类上
@Repository标注在数据访问类上
同时我们在依赖注入的运用中,如果有多个类继承该接口并启用了控制反转,这时便会报错,因为程序不知道用依赖哪一个控制反转进行注入,所以在这里,我们需要为依赖注入添加条件
在@Component或其衍生类上面添加@Primary 表示该控制反转为首个依赖对象
或者在@Autowired上面添加@Qualifier("") 里面添加依赖的bean名,一般默认为类名的首字母小写
也可以使用@Resource(name="")来替换@Autowired,name为想要依赖的bean名
完成依赖注入和控制反转之后,我们来浏览器查看运行结果