介绍
新手程序员一枚,渴望成为大神,来点关注来点赞,给我介绍几个大神也行,球球了。
主要记录自己的学习过程,将之前的笔记进行整理并分享一下,有错误请指出,谢谢各位大佬爷们的观看。
下面开始分享我的笔记
三层架构
流程
controller层接收到请求去调用service层
service层去调用dao层
dao层获取数据,交给servicec层
service层对数据进行逻辑处理,并返回给controller层
controller层获取到数据响应给浏览器
修改上文(请求与响应~响应)中的程序
service层
接口
-
package com.testpeople.service; import com.testpeople.pojo.Emp; import java.util.List; public interface EmpService { //获取员工列表数据 public List<Emp> listEmp(); }
实现
-
package com.testpeople.service.impl; import com.testpeople.dao.EmpDao; import com.testpeople.dao.impl.EmpDaoA; import com.testpeople.pojo.Emp; import com.testpeople.service.EmpService; import java.util.List; public class EmpServiceA implements EmpService { // service层获取数据来自dao层 故需要dao层对象 private EmpDao empDao = new EmpDaoA(); @Override public List<Emp> listEmp() { //调用Dao层获取数据 List<Emp> empList = empDao.listEmp(); //对数据进行处理 empList.stream().forEach(emp ->{ //处理gender~男:1 女:2 String gender = emp.getGender(); if ("1".equals(gender)){ emp.setGender("男"); } else if ("2".equals(gender)) { emp.setGender("女"); } //处理job~讲师:1 班主任:2 就业指导:3 String job = emp.getJob(); if ("1".equals(job)){ emp.setJob("讲师"); } else if ("2".equals(job)) { emp.setJob("班主任"); } else if ("3".equals(job)) { emp.setJob("就业指导"); } }); return empList; } }
dao层
接口
-
package com.testpeople.dao; import com.testpeople.pojo.Emp; import java.util.List; public interface EmpDao { //获取员工数据集合 public List<Emp> listEmp(); }
实现
-
package com.testpeople.dao.impl; import com.testpeople.dao.EmpDao; import com.testpeople.pojo.Emp; import com.testpeople.utils.XmlParserUtils; import java.util.List; public class EmpDaoA implements EmpDao { @Override public List<Emp> listEmp() { //加载并解析XML文件 String filePath = this.getClass().getClassLoader().getResource("emp.xml").getFile(); System.out.println(filePath); List<Emp> empList = XmlParserUtils.parse(filePath, Emp.class); return empList; } }
contraller层
-
package com.testpeople.controller; import com.testpeople.pojo.Emp; import com.testpeople.pojo.Result; import com.testpeople.service.EmpService; import com.testpeople.service.impl.EmpServiceA; import com.testpeople.utils.XmlParserUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class EmpController { private EmpService empService = new EmpServiceA(); @RequestMapping("/listEmp") public Result list(){ //获取数据 List<Emp> empList = empService.listEmp(); //响应数据 return Result.success(empList); } }
效果见 (请求与响应~响应)
分层解耦
内聚~软件中各个功能模块内部的联系
解耦~衡量软件中各个模块/层中间的依赖关系,关联程度。
设计原则~高内聚低耦合
解耦合~(利用容器)
控制反转~IOC
对象的创建控制权限由程序自身控制转移到外部(容器),此种思想叫控制反转(其中容器叫spring容器/IOC容器)。
依赖注入~DI
容器为程序提供运行时,所以依赖的资源,称为依赖注入。
Bean对象
IOC容器中创建、管理的对象,称为bean
IOC&DI
入门程序
步骤
Service层及Dao层的实现类,交给IOC容器管理
删除实现类中new的对象。
为Controller及Service注入运行时,依赖的对象。
为类添加@Component注解。(添加到容器中)
为对象添加@Autowired注解。(实现依赖注入)
注意不要添加错误。
若有两个相同的实现类,使用那个变将那个实现类添加@Component.
运行测试
效果
IOC详解
Bean声明
将某个对象交给IOC容器管理,需要在类上添加以下注解。
可以通过idea工具查看bean对象
注意
添加注解是可在注解后添加名字(value字段)一般不用。
-
@Service(value = "EmpA")
使用上述注解都可声明bean,但是在springboot集成web开发中,声明控制器bean只能使用@Controller.
Bean的组件扫描
声明的注解,想要生效,需要被组件扫描注解@ComponentScan扫描到。
默认在启动类中添加了此注解,扫描范围启动类所在的包以及子包。
可以通过自定义扫描范围,不建议。
DI详解
Bean注入
@Autowired:默认按照类型自动装配。
存在多个bean时解决。
@Primary ~那个需要添加到那个。
@Autowired + @Qualifler("bean名称")
@Resource("bean名称")
@Autowired和@Resource区别
@Autowired是spring框架提供的,而@Resource是JDK提供的注解
@Autowired默认按照类型注入,而@Resource默认按照名称注入。
以上是学习的第九弹笔记,也是后端开始的第五弹笔记,感兴趣的关注一手,后面会慢慢更新笔记。
项目位置!!!!!
https://gitee.com/zsjnew/admin_web_project.git
公司组织培训了,更新应该会更加快,记得关注哦,感谢各位老爷们!!!