java-补充学习(1)

一 。一些不熟悉的java基础,学习下

  • lambda表达式 

Lambda 表达式有何用处?如何使用? - 知乎 lambda表达式理解上有问题,不过他是锦上添花,java8新特性,不太捉急,先放着,本来就是用来写简化优雅代码用的

  • 内部类

内部类,也不是特别常用,即使不会,一时半会不影响,先放着


这块对过去的项目翻个底朝天,然后希望能从过去的这个java项目中,能够收获一些实战经验!!!

第一个工作后的java项目 spring + spring mvc

独立思考,扒开过去的项目,梳理整个项目的目录结构,包,文件,具体每一行代码。

思考与总结

1.关于项目的目录结构

api service web dao  common 这5个包    下面我们非常仔细的不错过这里面任何一个文件、包。希望我能通过我做过的这个项目 温故而知新。而不是没有回顾总结。

因为 每一个包其实都很多需要学习的杂碎的东西,所以这篇教程可能只适合我本人哈。

但如果此时此刻的你,在看到这篇文章时,能有一个点让你眼前一亮,那也是超级棒的。

api层-api接口层 

  •  what is api  。api  即api接口层。在java项目里,只要看到api文件夹直接反射弧就是这是外部系统调用此系统的媒介,还有直接联想就是dto,dto其实定义的就是接口的出入参。一般api接口层,因为提供的就是api能力,因此里面会有专门的dto包用于封装。里面封装的都是一些系统对外提供的接口,可供外部系统调用的接口,都是放在api这一层面。因此以后再看其他项目的目录结构也是一样,但凡看到api这个目录,联想到的都是系统对外提供服务的文件夹,即api接口层。只不过和之前不一样的是,java对外提供接口供别的系统调用可以是http 也可以是远程。
  • what is dto 。关于dto-数据传输对象  data transfer object ,下面这篇文章你就能了解了,

我一般把dto弄做出入参类的封装,完美的展现了数据传输层,

浅析VO、DTO、DO、PO的概念、区别和用处 - 随风而逝,只是飘零 - 博客园

如果说学习一个知识需要三遍:那我认为第一遍就是初时知识,第二遍就是实践知识,第三遍就是回顾 知识。基本这三遍下来,你便可以知其所以然了。

  • java web目录结构 。基本从我接触框架 做的项目后,我就发现一个奇怪的现象,我发现一个项目在经过分层后,每个层的目录结构竟是如此惊人的相似。一开始我以为这是由于框架的原因,后来才发现并不是,因为无论是spring 还是spring boot框架做的项目都是这样的。其实这就是java的目录规范 ,至于规范我们学习&遵守就中了。虽然在java大佬面前这款可能是弱智,但是对于小白成长这是every的必经之路吧。

看下你天天见的目录结构及其含义,实际这就是maven下的产物

src/main/java  

你写的源代码都放在这里啊
src/main/resources各种配置文件
src/main/webappweb应用的网页
src/main/doc
src/test/java你搞的单元测试的源代码都放在这里啊
src/test/resources测试 使用的资源文件
target/classessrc/main/java里的源码编译后的class文件都在这里啊。maven编译源代码 的目录 
target/test-classessrc/test/java里的源码便后的class文件都在这里啊。maven编译单元测试代码的目录。
target/generated-sources
target/generated-test-sources
pom.xmlmaven工程的配置文件。此文件控制 maven的构建行为
层.iml代码编辑器独有的配置文件 ,由idea编辑器产生    .iml  .idea/均不用理会,本身和java项目没有任何关系
readme.txt工程的说明文件
.gitignore提交 git不扫描的文件 
External Libraries外部库 (项目用到的外部库:包括jdk1.8的libs  还有其他外部库) 实际就是各种jar包
Scratches and Consoles 

目前还没有用到

  • jar 。类文件打包成jar包,供调用。 jar看着很熟悉吧,但我并不了解他。还记得jdk嘛,那里面可是很多jar包啊。还记的最常见的jar包 tools.jar嘛。其实java基础的时候,在一开始接触jdk的时候就接触到了,然而摇身一变各种项目的jar包,你就不认识了???即使是框架,他也是很基础的东西啊。在External Libraries中 ,放的就是各种jar包啊,当然也包含java基础开发工具包, Java Development Kit java开发工具包。在以往的开发习惯中,我们由于系统写的类文件都是服务于自身系统,因此并没有把自己写的类文件打包供别人调用的习惯,但实际上我们无时不刻不在调用别人的jar包。jar包这个东西好用的很。另外java语言在开发时,考虑到一些通用的常用的类,他就给封装在java的jdk中了。因此jdk里面的jar包是不用maven仓库管理的,maven仓库管理的都是远端的jar包。如果你觉得你写的jar包可以开源,那你可以将jar包上传 到远端,让别人通过maven将次jar包依赖下载 到本地即可使用。
  • maven 。看完jar包之后,忽然想起是maven在管理jar包,现在终于也理解maven是干啥的了。我们写完的类,本地打包成jar包之后,上传到远端。这样maven才能管理jar包啊,才能替你下载jar包啊,才能让你爽死啊。因此java开发的本质就是遵循一系列的规范,利用maven管理远程依赖,搭建本地 开发环境进行开发。maven的工作方式基本就是 scan project-read  pom-resolve dependency
  • 常量定义:可以用3种方法定义---class  /   interface  / enum 
  • 泛型:泛型可以看下源码的注释。泛型=Type parameters  即类型参数 T E。我对泛型的通俗理解:就是某个变量在 定义时他的数据类型不固定的时候,此时 不给他定义具体的数据类型,给它定义泛型。泛型的使用:因为在开发过程中,我发现泛型经常被使用,但是我并没有系统学习,而泛型本身其实很常用。泛型比较常见的使用:修饰变量  修饰方法 修饰类 修饰接口,即泛型类 泛型方法 泛型接口,泛型变量。泛型是 jdk 1.5时的新特性,泛型的本质就是参数化类型。目前时间还比较少,以后慢慢来。
  • 枚举:枚举类 用enum作为关键字 定义枚举类。枚举类的定义一般都是用来定义枚举常量的,一般 k v 形式的常量都是用枚举类来定义的。 
  • api接口定义:api包的作用就是提供api接口。api接口可以是和http的,也可以是rpc的。而java中,也是在api包中专门有定义rpc接口的interface

  • pom.xml :之前学习过pom,但是当时对maven还有pom都不太了解,现在使用一段时间之后,可能能理解一下了。实际小小的pom里面有大学问。pom里面groupid artifactid version相当于xyz三维坐标确定一个点,标记了该项目的唯一性,dependencies也记录了大量的依赖,以及build构建的规则,distributionManagement发布的maven地址。pom可以理解为是maven管理项目的小弟 ,maven每次都是通过pom小弟来知道如何管理项目。POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。下面这个pom的学习链接还不错:JAVA: 史上最全maven pom.xml详解  或者   JAVA: 史上最全maven pom.xml详解 - 小小鸟儿! - 博客园

  • service层-服务层

  • service层:what is service ?
  • 关于inerface和其实现类:我发现在api接口层定义的接口,一般都在web层定义实现类。而web层的实现类调用service层的接口。service层的接口和实现类都定义在service包中。编码习惯里肯定是写了接口下一步指定想着写其实现类啊。
  • 写代码的时候是不该问问自己,凡是不是new出来的对象,这个对象怎么来的??如果是借助注解搞出来的对象,如果不用注解代码是什么样的??注解又是如何 让spring容器 自动管理对象 呢,怎么处理的对象之间的依赖关系的呢?
  • spring spring boot到底是做什么的?????java开发绝大部分都是使用spring、spring boot 来管理 类的创建、以及类之间的依赖关系。简而言之,如果有一天你觉得代码中大量的注解让你极其不理解的时候,你就要回归一下什么是类,java是面向什么编程的了。这样或许你就能记住spring框架存在的意义了。
  • service层有个wrapper文件夹,几乎放的都是rpc调用的代码。
  • web层

  • 还记得api层定义的那些接口嘛,interface。难道你都不好奇在api层定义了接口之后,他的实现类定义在哪个包中嘛????没错api层接口的实现类,正是定义在web层包中。在web层中有一个很重要的resources文件夹:这里面配置了所有的spring的配置。spring-root.xml.spring-root.xml文件中引入了很多的xml,可以理解这些xml就是最后spring要生成的对象基本都配置在xml中了。
  • DAO层

  • dao:这个层主要就是放一些操作数据库映射的xml和对应的数据库配置
  • common层

  • @Service  @Controller @Component @Reposity @Autowired @Resource @Value
  • spring如何利用注解生成的对象???之前学习了一下下注解哈,@Service @Controller @Component @Reposity这四个注解都是注解形式的通知spring去生成对象的。一般我看习惯都是先定义接口,在定义实现类,在实现类的上面用@Service @Controller @Component @Reposity通知spring生成对象
  • spring自动生成的对象,如何使用????@Autowired @Resource这两个注解用于spring自动装配对象,上一步生成的对象只需使用这两个注解就可以装配对象。
  • spring真的是6啊,用几个注解随随便便就生成了对象,随随便便又使用了对象。
  • @Value  这个注解也相当不错了。可以利用他给变量赋值



项目零碎总结

1.java常量定义

常量的命名规范:字母大写,用下划线分隔

之前 定义java常量都是在class中定义,并且用final修饰,并且定义的时候就初始化出来。

定义常量的两种方法:class interface enum  接口和类是两种东西 三种定义常量 的 方法各有优势

class:

interface:接口中变量定义默认的修饰符是 public static final的,因此通常可用接口来定义常量。而且这个实际编码中也更常用,

enum:key value更能见名之意

2.implements Serializable 

这个Serializable哦,没有什么实质性的用,用于数据传输。可保证类的属性的顺序。

3.其实时间长了,你应该有自己的独立思考。或许我们一开始是复制粘贴,但是 慢慢的是不是我们能够有自己的思想。这个代码不这么搞行不行,为什么要这么搞?换个方法搞中不中?????

q我們可以先不会造轮子,但是我们可以先会用轮子,然后 我们再去对轮子本身有一个自己的见解这就足够了。

4.yyyy-MM-dd HH:mm:ss.SSS

之前真沒見過,更为注意过一些细节。
yyyy:代表年
MM:代表月(MM和M一样,区别就是MM表示从零开始,比如四月份,MM显示04,M显示4,后面的如同)
dd:代表日
HH:代表24小时制的小时
hh:代表12小时制的小时
mm:代表分钟
ss:代表秒
SSS:代表毫秒

5.pojo  po qo vo 

之前做的项目里。由于不涉及到设计数据库,所有的功能基本都是依赖外部接口,因此就见过一次 DTO data transfer object。 

下期要做的项目啊,里面有各种o。我们也来学习下,知道这个玩意是干啥的。

O/RM 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在 O/R Mapping 的世界里,有两个基本的也是重要的东东需要了解,即 VO , PO 。

PO : PERSISTANT OBJECT 持久化对象(对应数据库表中的 一条记录)

DO: DOMAIN OBJECT 领域对象(对标数据库的表字段,业务实体) 

DTO: DATA TRANSFER OBJECT(展示层和服务层之间的数据传输对象 )

VO: VIEW OBJECT (某个页面的数据组合起来)

POJO:plain ordinary java object (纯  java bean)

DAO: DATA ACCESS OBJECT(数据访问对象)

QO: QUERY OBJECT(查询对象)

6.注解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值