当前位置: 首页 > news >正文

网站如何进行优化设计爱站seo排名可以做哪些网站

网站如何进行优化设计,爱站seo排名可以做哪些网站,产品包装设计网,服务器搭建代理ip文章开始之前,先引入软件开发的两个名词:耦合和内聚。耦合是指:衡量软件中各个层(三层架构)/各个模块的依赖关联程度;内聚是指:软件中各个功能模块内部的功能联系。三层架构中Controller、Servi…

         文章开始之前,先引入软件开发的两个名词:耦合和内聚。耦合是指:衡量软件中各个层(三层架构)/各个模块的依赖关联程度;内聚是指:软件中各个功能模块内部的功能联系。三层架构中Controller、Service、Dao是相互依赖关联的,是耦合的,并且在各层级中,直接使用new创建的依赖的对象,假如依赖的对象发生了变化,就必须去修改源代码,这是我们不愿意看到的。三层架构的每一层内部的功能都是独立的,都只处理自身的业务逻辑,其他业务逻辑不会定义在该类中,所以说类聚程度很高。软件开发就是需要“高内聚,低耦合”。

        三层架构解耦的思路

        需要依赖其他层完成业务时,在声明对象的时候,不要直接new对象;需要使用一个容器,将需要使用的对象存储起来,当需要使用该对象时,直接在容器中获得即可,避免用new实例化对象,从而解除耦合。那么如何实现这个操作呢?Spring提供了两个思想(方法):控制反转,依赖注入。

        控制反转、依赖注入、Bean对象

        控制反转

        控制反转(Inversion Of Control),简称IOC。其主要思想是:对象的创建控制权由程序自身(new对象)转移到外部(容器),这个容器也可以称为IOC容器或者Spring容器(一般不用这个名字)。

        依赖注入

        依赖注入(Dependency Injection),简称DI。其主要思想是:IOC容器为应用程序提供运行时所依赖的资源(需要使用的实体类)。

        Bean对象

        Bean对象是IOC容器中创建和管理的对象。

        具体实现

        因为Controller层依赖了Service层、Service层依赖了Dao层,所以说我们要将Dao及Service层的实现类交给IOC容器管理,并且为Controller及Service层注入运行时所依赖的对象(DI)。Spring框架提供了两个注解实现IOC和DI,分别是:@Component,将该类交给IOC容器管理,这个注解一般使用在实现类上面;@AutoWired,从IOC容器中自动寻找依赖的类并注入,使用在类的声明上。

        Controller层

        没有哪一层需要依赖Controller层,所以说Controller不需要交给IOC容器管理,但是Controller层依赖了Service层,所以说在声明Service对象的时候,要在声明上添加@AutoWired注解,表示从IOC容器中进行依赖注入:

package com.wzb.controller;import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONUtil;
import com.wzb.pojo.User;
import com.wzb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {@Autowiredprivate UserService userService;// 获取用户数据的代码不能写在此处,类的成员变量初始化是在类的实例化阶段进行的,此时可能@AutoWired注入还未完成,导致Null// private final List<User> userList = userService.findUser();@RequestMapping("/list")public String list() {List<User> userList = userService.findUser();return JSONUtil.toJsonStr(userList, JSONConfig.create().setDateFormat("yyyy-MM-dd HH:mm:ss"));}}

        特别提醒:在不使用IOC容器的时候,可以将获取数据当作成员变量书写,因为事先已经完成了UserService的初始化,不会为null;但是使用之后,获取数据必须在方法中定义,因为类的成员变量初始化是在类的实例化阶段进行的,此时可能@AutoWired注入还未完成,导致Null。

        Service层

        Service层作为Controller层的依赖,所以说在类名上必须加上@Component注解,代表将该类交给IOC容器管理;Service层还依赖了Dao层,所以说在声明的时候需要使用AutoWired注解

package com.wzb.service.impl;
import com.wzb.dao.UserDao;
import com.wzb.pojo.User;
import com.wzb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;/*** Service层实现类**/
@Component
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;// 获取用户数据的代码不能写在此处,类的成员变量初始化是在类的实例化阶段进行的,此时可能@AutoWired注入还未完成,导致Null// private final List<String> lines = userDao.findUser();public List<User> findUser() {List<String> lines = userDao.findUser();List<User> userList = lines.stream().map(line -> {String[] parts = line.split(",");Integer id = Integer.parseInt(parts[0]);String username = parts[1];String password = parts[2];String name = parts[3];Integer age = Integer.parseInt(parts[4]);LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));return new User(id, username, password, name, age, updateTime);}).collect(Collectors.toList());return userList;}
}

        Dao层

        Dao层不需要依赖其他层,但是Service依赖了Dao层,所以说只需要在类名上添加@Component注解即可:

package com.wzb.dao.impl;import cn.hutool.core.io.IoUtil;
import com.wzb.dao.UserDao;
import org.springframework.stereotype.Component;import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;/*** Dao层的实现类**/
@Component
public class UserDaoImpl implements UserDao {@Overridepublic List<String> findUser() {InputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt");return IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>());}
}

        通过Spring框架提供的IOC和DI,简单的实现了分层解耦,降低了模块之间的耦合度,但是也并不是大量使用IOC和DI就是完美的,这其实破坏类的不可变属性:字段注入使得类的依赖对象可以在类实例化后被外部(Spring 容器)随意修改。所以说使用还是要合理。

 

 

 

http://www.yayakq.cn/news/429268/

相关文章:

  • 网站推广排名教程网站的交互体验
  • 网络营销网站建设培训电影网站怎么做关键词
  • 邯郸现代建设集团网站唐山网站建设公司哪家好
  • 华为手机网站建设策划书mr. tailor wordpress
  • 亚马逊网站建设资料网站建设装修
  • ppt图标网站链接怎么做沧州地区做网站
  • 兰州医院网站制作76人vs猛龙
  • 门户营销型网站搭建建站公司还有前途吗
  • 郴州做网站的公司wordpress添加媒体失败
  • 广州市天河区建设局网站云落 wordpress主题
  • 绵阳网站建设哪家好响应式网站开发 三合一建站
  • 通过网站建设提高企业的大型网站 开发流程
  • 深圳专业网站建设技术北京网站建设推广
  • 网站建设 首选百川互动怎么做移动网站
  • 如何购买企业黄页网站网页设计代码模板人物介绍
  • 企业网站后台管理系统dedecms大气金融企业网站模板
  • 自己做的网站怎么在百度能搜到给别人做网站怎么赚钱吗
  • 云南网络网站推广wordpress 问答插件2
  • 可以做片头的网站成都营销网站建设
  • 校园图书回收网站建设网站建设开发公司
  • 泰来县城乡建设局网站wordpress仿论坛
  • 数据库2008做企业网站福利窝又一个wordpress
  • 网站建设的实践体会网站如何做触屏滑动
  • 室内设计知名网站网站服务器 同步备份
  • 房子如何上网站做民宿山东建设网站广告
  • 周口网站建设73data网站完成上线时间
  • 网站服务器服务商网站建设多少
  • 网站一个页面多少钱吴杰
  • 百度收录网站名湖南省博物馆网站建设
  • 自己开网站能赚钱吗海口网站建设哪家专业