Java Notes
java-notes
Java Notes。虽然是个前端,但之前也接触过java,所以,就当复习做个笔记吧。该文档来自java-note/README.md。
准备工作
其它推荐资源
Projects
SpringBootHelloWorld
: 使用Spring Boot
框架,用maven
构建的HelloWorld
项目SpringBootHelloWorld-Gradle
: 使用Spring Boot
框架,用gradle
构建的HelloWorld
项目MyBatisHelloWorld
: 使用mybatis
框架编写的HelloWorld
项目SpringBoot-Mybatis
: 未完成-
MybatisCRUD
mybatis-config.xml
元素的声明循序必须按照properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?
<!-- 这样是可以的 --> <configuration> <properties resource="config.properties"></properties> <typeAliases></typeAliases> </configuration> <!-- 这样是不可以的,会报错 --> <configuration> <typeAliases></typeAliases> <properties></properties> </configuration>
CustomAnnotation
: 自定义注解- 方法名注解样例
-
方法参数注解样例
@AutoRun(times = 3) public static void showMsgThreeTimes() { System.out.println("AutoRun showMsgThreeTimes!"); } @AutoRun public static void showSingleMsg() { System.out.println("AutoRun showSingleMsg!"); } public void showEmail(@Email String email) { System.out.println("email :" + email); } /* 输出 AutoRun showSingleMsg! AutoRun showMsgThreeTimes! AutoRun showMsgThreeTimes! AutoRun showMsgThreeTimes! Jun 28, 2017 7:45:35 PM org.hibernate.validator.internal.util.Version <clinit> INFO: HV000001: Hibernate Validator 5.2.4.Final values:email size: 0 msg: values:abc size: 1 msg:Email is invalid. */
- java-reflect
- Reflect.java
package io.github.zhoukekestar; public class Reflect { private String message = null; public Reflect() { } public Reflect(String msg) { this.message = msg; } public void show() { System.out.println("Hello " + this.message); } public static void show(String msg) { System.out.println("Hello " + msg); } }
- App.java
package io.github.zhoukekestar; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class App { public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException { Class reflect = Class.forName("io.github.zhoukekestar.Reflect"); Method show = reflect.getDeclaredMethod("show", String.class); show.invoke(null, "World! by show(msg)"); show = reflect.getDeclaredMethod("show"); show.invoke(new Reflect("World! by show()")); } } /* 输出: Hello World! by show(msg) Hello World! by show() */
一些概念
- Reflect.java
DAO
查看Stackoverflow上的回答: data-access-object-dao-in-java
一个DAO样例。
AOP
作者:知乎用户
链接:https://www.zhihu.com/question/24863332/answer/48376158
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。
AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。
JavaBeans
JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
IoC & DI
可参考:Java之控制反转和依赖注入。
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。
其中 Angular 也用到了这种思想:
Angular遵循软件工程的MVC模式,并鼓励展现,数据,和逻辑组件之间的松耦合。通过依赖注入(dependency injection),Angular为客户端的Web应用带来了传统服务端的服务,例如独立于视图的控制。因此,后端减少了许多负担,产生了更轻的Web应用。
其他基础
- IO
- 网络编程
- 多线程
Comments
Leave a comment