Java 入门图解 (上)


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

在这里插入图片描述

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 管理。控制反转的一种途径是通过依赖注入。
在这里插入图片描述
DI 依赖注入,Spring 按照配置规则(注解 or xml 文件)将依赖的内容注入给指定的 bean

在这里插入图片描述

1.2.2 AOP

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

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

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

1.3 如何新建一个 Spring 项目

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

1.3.1 步骤 1

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

在这里插入图片描述

1.3.2 步骤 2

在这里插入图片描述

1.3.3 步骤 3

在这里插入图片描述

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

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

<?xml version="1.0" encoding="UTF-8"?>  
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  
    <!-- 默认的值是${user.home}/.m2/repository -->  
    <!-- 此处请输入正确的地址!!!-->
    <localRepository>/?/?/.m2/repository</localRepository> 
  
    <!-- 如果Maven要试图与用户交互来得到输入就设置为true,否则就设置为false,默认为true。 -->  
    <interactiveMode>true</interactiveMode>    
    <!-- 如果Maven使用${user.home}/.m2/plugin-registry.xml来管理plugin的版本,就设置为true,默认为false。 -->  
    <usePluginRegistry>false</usePluginRegistry>  
  
    <!-- 如果构建系统要在离线模式下工作,设置为true,默认为false。 如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,那么这个设置是非常有用的。 -->  
    <offline>false</offline>    
    <mirrors>  
        <mirror>  
            <id>nexus-aliyun</id>  
            <mirrorOf>central</mirrorOf>  
            <name>Nexus aliyun</name>  
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
        </mirror>  
    </mirrors>    
    <!-- settings.xml中的profile是pom.xml中的profile的简洁形式。 它包含了激活(activation),仓库(repositories),插件仓库(pluginRepositories)和属性(properties)元素。   
        profile元素仅包含这四个元素是因为他们涉及到整个的构建系统,而不是个别的POM配置。 如果settings中的profile被激活,那么它的值将重载POM或者profiles.xml中的任何相等ID的profiles。 -->  
    <profiles>  
        <profile>  
            <id>default</id>  
            <activation>  
                <activeByDefault>true</activeByDefault>  
                <jdk>1.8</jdk>  
            </activation>  
            <repositories>  
                <repository>  
                    <id>spring-milestone</id>  
                    <name>Spring Milestone Repository</name>  
                    <url>http://repo.spring.io/milestone</url>  
                    <releases>  
                        <enabled>true</enabled>  
                    </releases>  
                    <snapshots>  
                        <enabled>false</enabled>  
                    </snapshots>  
                    <layout>default</layout>  
                </repository>  
                <repository>  
                    <id>spring-snapshot</id>  
                    <name>Spring Snapshot Repository</name>  
                    <url>http://repo.spring.io/snapshot</url>  
                    <releases>  
                        <enabled>false</enabled>  
                    </releases>  
                    <snapshots>  
                        <enabled>true</enabled>  
                    </snapshots>  
                    <layout>default</layout>  
                </repository>  
            </repositories>  
        </profile>  
    </profiles>  
    <!-- activations是profile的关键,就像POM中的profiles,profile的能力在于它在特定情况下可以修改一些值。   
        而这些情况是通过activation来指定的。 -->  
    <!-- <activeProfiles/> -->    
</settings> 

1.3.4 没有 src 目录怎么解决?

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

1.3.5 没有 resouces 目录怎么解决?

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

1.3.6 创建成功

在这里插入图片描述

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

在 pom.xml 文件增加

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.6.RELEASE</version>
      </dependency>

🌰🌰🌰 代码戳这里

在这里插入图片描述

2. 分层领域模型

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

在这里插入图片描述

2.1 论正确分层的重要性

2.1.1 分层概述

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

在这里插入图片描述

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

  • 开放接口层:

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

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

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

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

  • Manager 层:通用业务处理层

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

2.1.2 请慎重选择分层

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

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

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

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

2.2 各种概念

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

在这里插入图片描述
分层领域模型规约:

  • 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.参考资料

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值