三层架构:controller service dao
controller层建起了外界与业务层沟通的桥梁。
service层处理业务逻辑,比如增删改查。
dao层在mybatis中是Mapper
层,是和数据库打交道的。
前端发起请求:先到controller
层,controller
接收到请求后调用service
层进行逻辑处理,逻辑处理的前提是拿到数据,所以此时service
会调用dao
层,dao
层解析文件数据,之后返回给service
层,service
拿到数据后进行逻辑处理,处理完之后将数据返回给controller
层,controller
再来响应数据给前端。
controller
调用service
层的代码,需要new
service层的实现类,出现耦合(一个实现类对另一个实现类的依赖),还有就是service
调用Dao
层的方法,需要new Dao层的实现类,还是耦合,解决办法是将实现类加到容器内(只需要在实现类上加上注解@component
),在service中需要new实现类时(我们不new,在声明的成员变量上加上注解@Autowired
),从容器中查找,如果容器内有多于一个要选的对象,则会报错,需设置优先级,加上注解@Primary
。
- 控制反转(IOC): 对象的创建控制权由程序自身转移到外部容器。
- 依赖注入: 容器为应用程序提供运行时所依赖的资源。
Bean
对象:IOC容器中创建、管理的对象,称之为bean。
为了判断容器内的bean对象属于哪一层,由Component注解又衍生出了三个注解,分别是Controller,Service,Repository,分别对应控制层、服务层、dao层的注解。
前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan
扫描
@Componentscan
注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication
中,默认扫描的范围是启动类所在包及其子包。