分层解耦
1、三层架构
- 接受请求、响应数据:controller 控制层
- 逻辑处理:service 业务逻辑层
- 数据访问:dao 数据访问层(持久层) 负责数据访问操作,包括数据的增删改查
数据访问的方式可能会是:文件中的数据、数据库中的数据、别人的接口的数据等
流程:
- contrller接收请求,传给service
- service层接收到处理的请求时,需要用到数据,所以去调用dao
- dao去拿数据给service,service拿到数据以后进行逻辑处理,处理结果再给controller
- controller响应
有点像买东西:
{
1、听顾客需求
2、包装
3、取货
4、提供商品
}
2、分层解耦
内聚:软件各个功能模块内部的功能联系;
耦合:衡量软件中各个层/模块之间的依、关联的程度。
软件设计原则:高内聚低耦合
控制反转:简称IOC,对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转
依赖注入 :简称DI,容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean
3、IOC&DI入门
完成controller层、service层代码的解耦;把new的对象都给删除掉;
- service层及dao层的实现类交给IOC容器管理
- 为controller及service注入运行时,依赖的对象
为dao、service中添加@Component注解,实现第一步;(在类上面添加)
为service、controller中添加@Autowired注解,实现第二步;(在变量上面添加)
通过注释打开@Component来实现解耦,切换类对象
4、IOC详解
- Bean四大注解:
为dao、service层更新注解;在controller层为Restcontroller注解做注释
/**
* @RestController注解:
* @RestController可以理解成@ResponseBody + @Controller
*/
-
Bean组件扫描:
- 想要生效bean四大注解,还需要被组件扫描注解@ComponentScan扫描,@ComponentScan注解虽然没有显示配置,但是,实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
5、DI详解:
1、依赖注入的注解:
-
@Auotowired:默认按照类型自动装配
-
如果同类型的bean存在多个:
- @Primary:位置是在当模块/功能,类上面
- @Autowired + @Qualifier("bean的名称"):位置在controller层,,类中方法外
- @Resource(name="bean的名称"):位置在controller层,类中方法外
6、面试题:@Resource与@Autowired的区别:
- @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。
- @Autowired默认是按照类型注入,而@Resource默认是按照名称注入的。