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

网站开发交什么税兰州网站建设公司

网站开发交什么税,兰州网站建设公司,福建网站开发企业,苏州住房与城乡建设网站文章目录 一、三层架构1.1 概述1.2 具体实现方法 二、分层解耦2.1 以往问题2.2 概念解释2.3 解耦思路 三、Spring核心:IOC & DI3.1 快速入门3.2 IOC(控制反转)详解3.3 DI(依赖注入)详解 注入方式 标签:…

文章目录

    • 一、三层架构
      • 1.1 概述
      • 1.2 具体实现方法
    • 二、分层解耦
      • 2.1 以往问题
      • 2.2 概念解释
      • 2.3 解耦思路
    • 三、Spring核心:IOC & DI
      • 3.1 快速入门
      • 3.2 IOC(控制反转)详解
      • 3.3 DI(依赖注入)详解 注入方式

标签:JavaWeb、三层架构、分层解耦、Spring、IOC、DI

一、三层架构

1.1 概述

为什么要采用三层架构?

  • 遵循单一职责原则,便于代码复用和后期维护。
  • 在程序设计和开发时,让每一个接口、类、方法的职责尽可能单一。
  • 代码拆分为以下三层:
    • controller :控制层,接收前端请求,处理请求并响应数据。
    • service :业务逻辑层,处理具体业务逻辑。
    • dao :数据访问层(Data Access Object,持久层),负责数据的增删改查。

在这里插入图片描述

1.2 具体实现方法

在 service 和 dao 层中,通常会先定义接口(命名规范为对象名+Service/Dao),再用实现类(命名规范为接口名+Impl)去实现接口,最后通过调用方法进行业务设计。


二、分层解耦

2.1 以往问题

  • 直接用 new 创建对象,业务变更时需要频繁更换对象,导致各层级耦合度高,影响维护与扩展。

在这里插入图片描述

2.2 概念解释

  • 耦合 :衡量软件各层/模块之间的依赖关联程度。
  • 内聚 :模块内部各功能之间的联系。
  • 高内聚低耦合 :高内聚指模块内部联系紧密,低耦合指模块之间依赖越低越好。
    高内聚、低耦合的目标是提升程序模块的可重用性和移植性,因此需要解耦。

2.3 解耦思路

  • 将项目中的类交由 IOC 容器管理(控制反转,IOC)。
  • 应用运行时需要对象时,直接依赖容器提供(依赖注入,DI)。

三、Spring核心:IOC & DI

3.1 快速入门

  • Dao 和 Service 层实现类加 @Component 注解,交由 IOC 容器管理。
  • Controller 和 Service 层通过 @Autowired 注入依赖对象。

3.2 IOC(控制反转)详解

Spring 框架为更好地标识 bean 所属层次,提供了 @Component 及其衍生注解:

注解说明位置
@Component声明bean的基础注解不属于以下三类时,用此注解
@Controller@Component的衍生注解标注在控制层类上
@Service@Component的衍生注解标注在业务层类上
@Repository@Component的衍生注解标注在数据访问层类上(由于与mybatis整合,用的少)

示例:

Service 层

@Service  
public class UserServiceImpl implements UserService {  @Autowired  private UserDao userDao;  @Override  public List<User> findAll(){  List<String> lines = userDao.findAll();  List<User> users = lines.stream().map(line -> {  String[] s1 = line.split(",");  String ID = s1[0];  String username = s1[1];  Integer password = Integer.parseInt(s1[2]);  String name= s1[3];  Integer age = Integer.parseInt(s1[4]);  LocalDateTime updateTime = LocalDateTime.parse(s1[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));  return new User(ID,username,password,name,age,updateTime);  }).collect(Collectors.toList());  return users;  }  
}

Dao 层

@Repository  
public class UserDaoImpl implements UserDao {  @Override  public List<String> findAll() {  InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("user.txt");  ArrayList<String> lines = IoUtil.readLines(resourceAsStream, StandardCharsets.UTF_8, new ArrayList<>());  return lines;  }  
}

注意:

  • 声明 bean 时可通过 value 属性指定 bean 名,未指定则为类名首字母小写。
  • 控制器 bean 只能用 @Controller 注解。
  • @ComponentScan 注解(包含在 @SpringBootApplication 中)会自动扫描启动类所在包及其子包。

3.3 DI(依赖注入)详解 注入方式

  • 属性注入

    @Autowired 
    private UserService userService;
    
    • 优点:简洁高效
    • 缺点:隐藏依赖关系,可能破坏封装性
  • 构造函数注入

    @Autowired 
    public UserController(UserService userService) { this.userService = userService; 
    }
    
    • 优点:依赖关系清晰,安全性高(可用final)
    • 缺点:代码稍繁琐,参数多时臃肿
    • 注意:只有一个构造函数时, @Autowired 可省略
  • Setter方法注入

    @Autowired 
    public void setUserService(UserService userService) {
    this.userService = userService; 
    }
    
    • 优点:封装性好,依赖关系清晰
    • 缺点:需额外编写Set方法,代码量大
      实际开发中,属性注入和构造函数注入最常用,官方推荐构造函数注入。
      多个 Bean 对象注入的解决方案
  • @Primary :指定默认实现

    @Primary
    @Service
    public class UserServiceImpl implements UserService {}
    
  • @Qualifier :指定注入的 bean 名称,需配合 @Autowired

    @Qualifier("userServiceImpl")
    @Autowired
    private UserService userService;
    
  • @Resource :按 bean 名称注入

    @Resource(name = "userServiceImpl")
    private UserService userService;
    

文章转载自:

http://siZZDcj3.pLchy.cn
http://XQ6WNaCq.pLchy.cn
http://dNwXQ4FT.pLchy.cn
http://FN0KjArS.pLchy.cn
http://mcynDFAd.pLchy.cn
http://Tj30tvXd.pLchy.cn
http://hz53NMD9.pLchy.cn
http://XAkMq8s1.pLchy.cn
http://G8USib8H.pLchy.cn
http://T0KrlVsi.pLchy.cn
http://l9yog1c6.pLchy.cn
http://ddQXSEXv.pLchy.cn
http://J2vwmMIc.pLchy.cn
http://9JZjNXcg.pLchy.cn
http://YonbkSAR.pLchy.cn
http://hZeepeyv.pLchy.cn
http://6tu9TwLr.pLchy.cn
http://7ENQexQ3.pLchy.cn
http://CjIpdGAu.pLchy.cn
http://HxltJf5I.pLchy.cn
http://pPWyQc30.pLchy.cn
http://d9OUztyh.pLchy.cn
http://Nn1ADiwp.pLchy.cn
http://Os7wlO16.pLchy.cn
http://eodz1mX5.pLchy.cn
http://TcYPlNx9.pLchy.cn
http://1LLxv12l.pLchy.cn
http://uv7w3o3Q.pLchy.cn
http://JyN17Qnc.pLchy.cn
http://BRclintN.pLchy.cn
http://www.dtcms.com/wzjs/665449.html

相关文章:

  • me域名的网站网站的页面布局是什么
  • 宁津哪个网络公司做网站比较好快速的网站设计制作
  • 做网站比较好的公司有哪些深圳深度网站建设
  • 个人网站做什么内容好建网站用什么程序好
  • 微信设计网站建设个人网站界面设计图片
  • 婚恋网站 备案条件网站内容建设的原则是什么意思
  • 制作房地产网站页面做网站 当站长
  • 做网站运营的女生多吗快递物流公司网站模板
  • 网站做海外的防护wordpress高级教程下载
  • 专做正品的护肤品网站有偿做设计的网站
  • 做网站被捉获取排名
  • 重庆市工程建设信息网官方网站讨债女企业家中标公司被强执
  • 青州哪里做网站做得好怎么网站搜索排名优化
  • 网站项目建设周期网站系统升级
  • 微网站和普通网站区别主页去掉wordpress
  • 如何打通微信公众号与wordpress江苏优化网站价格
  • 广西建设网桂建云网站网站建设页面
  • 个人做网站模版是否有人买网站建设需要学习什么
  • 分类信息网站建设系统专业做网站的公司有
  • 网站服务器的搭建番禺网站建设培训学校
  • 建筑网站免费建设部城市管理监督局网站官网
  • 做网站怎么偷源码做网站网页游戏服务器搭建
  • 网站编辑兼职网站建设项目总结报告
  • 网站设计内容代理主要干什么
  • vs 2017c 怎么建设网站wordpress红包
  • 网站服务器的选择logo免费生成网站
  • 营销型网站建设主要需要注意什么erp办公系统软件
  • 推广运营公司网站无锡企业建站程序
  • 仿造网站用侵权吗南海区建设局网站首页
  • 网站开发用哪些技术怎么样推广最有效最快速