怎么做网站的登录界面,集团公司做网站的好处有什么,谷歌推广课程,七牛云wordpress图床一、三层架构
#xff08;一#xff09;基础
在请求响应中#xff0c;将代码都写在controller中#xff0c;看起来内容很复杂#xff0c;但是复杂的代码总体可以分为#xff1a;数据访问、逻辑处理、接受请求和响应数据三个部分。在程序中我们尽量让一个类或者一个方法…一、三层架构
一基础
在请求响应中将代码都写在controller中看起来内容很复杂但是复杂的代码总体可以分为数据访问、逻辑处理、接受请求和响应数据三个部分。在程序中我们尽量让一个类或者一个方法只有一个功能这就是单一职责原则。增强可读性和可扩展性减少代码复杂性。为此将三层架构分为controller接受请求、相应数据Service逻辑处理Dao数据访问。
Controller控制层接收前端发送的请求对请求进行处理并响应数据。Service业务逻辑层处理具体的业务逻辑。Dao数据访问层Data Access Object持久层负责数据访问操作包括数据的增删改查。 二实例拆分
以javaweb_06请求响应——响应 中的四、实例为例将其拆分为三部分首先为实现service和dao分别创建接口然后分别实现其接口。 controller原本的代码 RequestMapping(/listEmp)public Result list(){//1、加载并解析emp.xml文件String file this.getClass().getClassLoader().getResource(emp.xml).getFile();ListEmp empList XmlParserUtils.parse(file, Emp.class);//2、对数据进行转化那么就需要遍历处理 gender和jobempList.stream().forEach(emp - {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(就业指导);}});//3、响应数据return Result.success(empList);}1、拆分结构 2、创建接口
EmpDao.java
package org.example.dao;import org.example.pojo.Emp;import java.util.List;public interface EmpDao {//获取员工列表数据public ListEmp listEmp();
}
EmpService.java
package org.example.service;
import org.example.pojo.Emp;import java.util.List;
public interface EmpService {public ListEmp listEmp();
}
3、实现接口
创建对应的类实现接口中定义的方法 EmpDaoA.java
package org.example.dao.impl;import org.example.dao.EmpDao;
import org.example.pojo.Emp;
import org.example.utils.XmlParserUtils;import java.util.List;public class EmpDaoA implements EmpDao {Overridepublic ListEmp listEmp() {//1、加载并解析emp.xml文件String file this.getClass().getClassLoader().getResource(emp.xml).getFile();ListEmp empList XmlParserUtils.parse(file, Emp.class);return empList;}
}
EmpServiceA.java
package org.example.service.impl;import org.example.dao.EmpDao;
import org.example.dao.impl.EmpDaoA;
import org.example.pojo.Emp;
import org.example.service.EmpService;
import java.util.List;public class EmpServiceA implements EmpService {public EmpDao empDao new EmpDaoA();Overridepublic ListEmp listEmp() {//1、调用dao获取数据ListEmp empList empDao.listEmp();//2、对数据进行转化那么就需要遍历处理 gender和jobempList.stream().forEach(emp - {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;}
}
修改EmpController.java
package org.example.controller;import org.example.pojo.Emp;
import org.example.pojo.Result;
import org.example.service.EmpService;
import org.example.service.impl.EmpServiceA;
import org.example.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(){//1、调用service获取数据ListEmp empList empService.listEmp();//3、响应数据return Result.success(empList);}
} 二、分层解耦
内聚软件中各个功能模块内部的功能联系 耦合衡量软件中各个层/模块之间的依赖关系、关联的程度。 控制反转Inversion Of Control 简称IOC对象的创建控制权由程序自身转移到外部容器这种思想称为控制反转。 依赖注入Dependency Injection简称DI。容器为应用程序提供运行时所依赖的资源称之为依赖注入。 Bean对象IOC容器中创建、管理的对象称之为bran。
三、IOCDI入门
1、控制反转
Service层及Dao层的实现类交给IOC容器管理。
2、依赖注入
为Controller及Service注入运行时依赖的对象。
3、运行测试 四、IOC详解
1、Bean的声明
从Conponent衍生出三类分别管理每一层如果对象由不由这三层管理但是还想交给IOC容器直接管理才直接由Conponent注解。 注 ①声明bean的时候可以通过Value属性指定bean的名字如果没有指定默认类名首字母小写. ②使用以上四个注解都可以声明bean但是在springboot集成web开发中声明控制器bean只能用Controller.
2、bean的组件扫描
①之前声明得bean的四大注解想要生效还需要被组件扫描注解ComponenetScan扫描 ②ComponentScan注解虽然没有显式配置但是实际上已经包含了启动类声明注解SpringBootApplication中默认扫描的范围是启动类所在的包及其子包。
五、DI详解
1、bean注入 Autowired注解默认是按照类型进行如果存在多个相同类型的bean将会报错。 解决方法 Primary设置bean的优先级想要谁先生效就将该注释加在它之前 Qualifier在Autowired注解之后加上Qualifier“想要生效的名字” Resource不使用Autowired而是换成Resourcename“指定的名字”
2、Resource与Autowired的区别 ①Autowired是Spring框架提供的注解而Resource是JDK提供的注解。 ②Autowired默认按照类型注入而Resource默认按照名称注入