Java 入门图解 (上)

文章目录

    • 1. Spring 相关
      • 1.1 Spring 是什么
      • 1.2 Spring 核心理解
        • 1.2.1 IOC
        • 1.2.2 AOP
      • 1.3 如何新建一个 Spring 项目
        • 1.3.1 步骤 1
        • 1.3.2 步骤 2
        • 1.3.3 步骤 3
        • 1.3.4 没有 src 目录怎么解决?
        • 1.3.5 没有 resouces 目录怎么解决?
        • 1.3.6 创建成功
        • 1.3.7 增加 spring 依赖 & 写个例子呗
    • 2. 分层领域模型
      • 2.1 论正确分层的重要性
        • 2.1.1 分层概述
        • 2.1.2 请慎重选择分层
      • 2.2 各种概念
    • 3.参考资料

刚开始接触 java 的时候各种晕头转向,很多概念都不知道,代码写起来很头大,略略总结近期接触到的各种概念。毕竟好记性不如烂笔头

Java 入门图解 (上)_第1张图片

1. Spring 相关

1.1 Spring 是什么

Spring 是一个开源框架, Spring 是 2003 年兴起的一个轻量级 java 开发框架。框架的主要优势是分层架构,其允许使用者选择使用哪一个组件,Spring 的核心是控制反转 (IOC)和 面向切面编程(AOP),划重点:

  • 轻量级:与 EJB 相比,依赖资源少,销毁资源少
  • 分层:一站式,每一层都提供解决方案 ,包括(web 层、service 层、dao 层)

1.2 Spring 核心理解

1.2.1 IOC

IOC 控制反转,原本需要自行创建和维护的 bean(可以理解为各种类) 交给 Spring 管理。控制反转的一种途径是通过依赖注入。
Java 入门图解 (上)_第2张图片
DI 依赖注入,Spring 按照配置规则(注解 or xml 文件)将依赖的内容注入给指定的 bean

Java 入门图解 (上)_第3张图片

1.2.2 AOP

AOP 面向切面,在调用对象的某个方法时,执行插入的切面逻辑。实现的方式

  • 动态代理也叫运行时增强,比如jdk代理 (接口 + 实现类)、CGLIB(实现类,字节码增强)
  • 静态代理是在编译时进行织入或类加载时进行织入,比如 AspectJ。
    Java 入门图解 (上)_第4张图片
    AOP 采取横向抽取机制,来取代纵向继承体系的重复代码。

经典应用:事务管理,性能监控,缓存,日志,安全检查等

1.3 如何新建一个 Spring 项目

好奇宝宝体质,研究了下如何基于 idea 创建一个 spring service 服务

1.3.1 步骤 1

点击:File -> New -> Project 然后按照下图创建项目

Java 入门图解 (上)_第5张图片

1.3.2 步骤 2

Java 入门图解 (上)_第6张图片

1.3.3 步骤 3

Java 入门图解 (上)_第7张图片

注意:此处有坑,请确认 {user_directory}.m2/ *.xml 配置的镜像地址可用,以下配置可用,亲测有效!

/?/?/.m2/repository要修改为正确的路径

  
  
  
      
    
    /?/?/.m2/repository 
  
      
    true    
      
    false  
  
      
    false    
      
          
            nexus-aliyun  
            central  
            Nexus aliyun  
            http://maven.aliyun.com/nexus/content/groups/public/  
          
        
      
      
          
            default  
              
                true  
                1.8  
              
              
                  
                    spring-milestone  
                    Spring Milestone Repository  
                    http://repo.spring.io/milestone  
                      
                        true  
                      
                      
                        false  
                      
                    default  
                  
                  
                    spring-snapshot  
                    Spring Snapshot Repository  
                    http://repo.spring.io/snapshot  
                      
                        false  
                      
                      
                        true  
                      
                    default  
                  
              
          
      
      
        
 

1.3.4 没有 src 目录怎么解决?

请用力戳这里 -> idea新建maven项目没有src目录的操作方法

1.3.5 没有 resouces 目录怎么解决?

请用力戳这里 -> intelliJ idea新建maven项目没有resource文件夹

1.3.6 创建成功

Java 入门图解 (上)_第8张图片

1.3.7 增加 spring 依赖 & 写个例子呗

在 pom.xml 文件增加

      
        org.springframework
        spring-context
        4.2.6.RELEASE
      

代码戳这里

Java 入门图解 (上)_第9张图片

2. 分层领域模型

了解下 spring 在服务器开发中所处的位置,其中也包含了其他主流的框架在服务器开发的所处位置:

Java 入门图解 (上)_第10张图片

2.1 论正确分层的重要性

2.1.1 分层概述

阿里的编程规范中约束的分层如下:

Java 入门图解 (上)_第11张图片

  • 终端显示层:各个端的模板渲染并执行显示的层。包括 JS 渲染,移动端展示等。

  • 开放接口层:

    • 封装 service 方法暴露成 RPC 接口
    • Web 封装成 http 接口

    进行网关安全控制、流量控制等。

  • Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。

  • Service 层:相对具体的业务逻辑服务层。

  • Manager 层:通用业务处理层

    • 对第三方平台进行封装的层,预处理返回结果及转化的异常信息
    • 对 Service 层通用能力的下沉,如缓存方案,中间件处理
    • 与 DAO 层交互,对多个 DAO 的组合复用
  • DAO 层:数据访问层,与底层 MySQL、Hbase 进行数据交互

2.1.2 请慎重选择分层

在经历加一个接口要改 30 个文件的「刻骨铭心」的记忆以后,我开始思考,真的需要这么多层嘛?

「分层一时爽,写起来火葬场」为了能过契合上面的分层模型,定义了太多没有实际使用价值的类,写起来不仅繁琐,简直阻碍了我对 java 这门语言的热爱,这么美好的人生全部都浪费在定义类上,我想说「人间不值得」……

你以为我会说怎么正确的分层嘛?不,我不会,毕竟作为 java 小白选手,还是很有自知之明的,不过个人觉得分层这种东西,还是要「分场景」处理的,不能一概而论,要根据自己业务做合适的调整。

「别人给的都是建议,请自己做选择」(ps 毒鸡汤上线

2.2 各种概念

港真,概念真没什么好说的,自己看看就知道是什么意思了,但是知道这些概念能够让你快速上手新项目(ps 不要问我怎么知道的……

Java 入门图解 (上)_第12张图片
分层领域模型规约:

  • VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象
  • DTO (Data Transfer Object):数据传输对象,Service 向外传输的对象
  • DO (Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体
  • DO(Data Object)/PO(Presistent Object):持久化对象,它跟持久层的数据结构形成一一对应的映射对应的映射关系
  • BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象
  • AO(Application Object):应用对象,在 web 层与 service 层之间抽象的复用对象模型
  • POJO(Plain Ordinary Java Object):POJO 专指只有 setter/getter/toString 的简单类,包括 DO/DTO 等。

领域模型命名规范:

  • 数据对象:xxxDO,xxx 即为数据表名
  • 数据传输对象:xxxDTO,xxx 为业务领域相关对的名称
  • 展示对象:xxxVO,xxx 一般为网页名称
  • 禁止命名成 xxxPOJO

本来打算把图解上面的内容都写好的,但是为了更好的阅读体验还是分为上下两个步骤比较合适,比较太长的文章读起来往往让人昏昏欲睡

3.参考资料

  • 怎样回答面试官:你对 Spring 的理解? (ps 高赞回答 1 & 2 为主要参考
  • idea新建maven项目没有src目录的操作方法
  • intelliJ idea新建maven项目没有resource文件夹
  • 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
  • 优秀的代码都是如何分层的

你可能感兴趣的:(Java,spring)