三层架构是指
1.Controller层(控制层):接受请求,响应数据(接受前端发送的请求,对请求进行处理,并且响应数据)
2.Service层(业务逻辑层,处理具体的业务逻辑):逻辑处理。
3.DAO层(数据访问层(持久层)):负责数据访问操作(也叫Mapper层),包括数据的增删改查,可以是数据库,文件,或者其他的Api接口。
分层解耦:
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖,关联的程度。
软件设计原则:高内聚低耦合。
控制反转:简称IOC,对象的创建控制权由程序本身转移到外部(容器),这种思想称为控制反转。
依赖注入:简称DI,容器为应用程序提供运行时,所 依赖的资源,称之为依赖注入。
Bean对象:IOC容器中创建,管理的对象,称之为Bean
操作:
Service层和DAO层的实现类交给IOC容器对象需要在类上面加上@Component (将当前类交给IOC容器管理,成为IOC容器的Bean)
依赖注入只要在用到的类上加上@Autowired(运行时,IOC容器会提供该类型的bean对象,并赋值给该变量--依赖注入)
IOC:
Bean的声明:
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
1.Component(声明bean的基础注解),不属于以下三类时,用这个注解。
2.Controller(@Component的衍生注解)标注在控制器类上。
3.Service(@Component的衍生注解),标注在业务层上。
4.Repository(@Component的衍生注解),标注在数据访问层类上(由于和mybatis整合,用的很少)
(RestController等于Controller+ResponseBody)
注意:声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller
Bean组件扫描:
前面声明bean的四大注解,要想要生效,还需要被组件扫描注解@ComponentScan扫描,@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围时启动类所在包及其子包。
DI详解:
@Autowired注解,默认是按照类型进行的,如果存在多个相同类型的bean,将会报出错误。
可以通过以下几种方式来解决。
1.Primary,在@Component类型的注解处加上@Primary。
2.Qualifier(),在@Autowired下加上@Qualifier表明具体是哪一个bean。
3.Resource,取代@Autowired,并且用name属性标明具体哪一个bean