Ambertime

ivicel's thoughts and writings

Java 日志框架之间的关系

1. Java 日志框架之间的关系图 2. 理不清的关系 4 种底层实现: JUL(java.util.loggging), log4j, logback, log4j2即(log4j-core) 3 个门面模式: JCL(commons-loggingg), sfl4j-api, log4j-api(即log4j2) 一堆 Adpater: 主要用于同一个门面模式下, 使用不同的底层实现 一堆 Bridge: 主要用于在不修改代码的情况下, 修改底层的实现

设计模式—单例模式

定义 单例模式指全局应用中只有一个实例 构造方法一般为 private 通过静态方法或者枚举返回实例对象 确保在多线程环境下只有一个实例产生 确保实例在序例化和反序例化时不会产生新的实例 饿汉模式 public class Singleton { public static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } 在类的内部有一个静态变量 instance,...

Dart Tutor

一个基本的 Dart 程序 printInteger(int aNumber) { print('The number is $aNumber.') } // 程序入口 main() { var number = 42; printInteger(number); } 一些重要的概念 在 Dart 中, 所有的一切都是对象, 继承自 Object 类, null 类型也是一个对象 Dart 是强类型语言, 但变量的声明是可以省略类型的, 程序会在第一次赋值时自动推断类型. 也可以使用 dynamic 关键字来声明动态类型 Dart 支持泛型, 如 List 或...

Spring Flasky 开发(三)

1. XSS 保护 不要相信用户每一个输入 我们需要对用户写的 post 进行过滤, 以避免 XSS 攻击. 其他的因为 Thymeleaf 默认输出都是 escape 的, 所以我们不需要对像个人 Profile 的信息输入进行过滤. // 这里设置一些支持的标签, 比如 span, p, h* 之类 private static final PolicyFactory POLICY_FACTORY = new HtmlPolicyBuilder() .allowElements(Const.ALLOWED_HTML_TAG).toFactory(); public static...

Spring Flasky 开发(二)

1. 注册功能 注册需要 4 个字段, 分别是 username, email, password, confirmPassword, 注册的 username 和 email 都是惟一的, 需要从库查找. 两次输入的密码需要相同, 这里自己定义了一个注解约束, 然后实现 ConstraintValidator 接口 // 这个注解作用于类上面, 目标是字段 first 的值要等于字段 second @Retention(RUNTIME) @Target(value = {TYPE, ANNOTATION_TYPE}) // 约束的具体实现类...