一 。一些不熟悉的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/webapp | web应用的网页 |
src/main/doc | |
src/test/java | 你搞的单元测试的源代码都放在这里啊 |
src/test/resources | 测试 使用的资源文件 |
target/classes | src/main/java里的源码编译后的class文件都在这里啊。maven编译源代码 的目录 |
target/test-classes | src/test/java里的源码便后的class文件都在这里啊。maven编译单元测试代码的目录。 |
target/generated-sources | |
target/generated-test-sources | |
pom.xml | maven工程的配置文件。此文件控制 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.注解