装配是什么? 创建应用对象之间协作关系的行为通常称为装配(wiring),这也是DI的本质。 我们必须要告诉Spring要创建哪些bean并且如何将其装配在一起。 Spring提供了三种主要的装配机制: 在XML中进行显式配置 在Java中进行显式配置 隐式的bean发现机制和自动装配 Spring的配置风格是可以互相搭配的,但应尽可能地使用自动配置的机制,因其使用起来要方便的多,显式配置越少越好。显式配置越少,代码就越容易维护。而基于Java和XML相比,JavaConfig的安全性比XML要好,并且功能更强大。 所以我们先来看Spring的自动化配置。 自动化装配Bean——便利 Spring从两个角度来实现自动化装配: 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的Bean。 自动装配 (autowiring):Spring自动满足Bean之间的依赖。 组件扫描和自动装配组合在一起就能使我们的显式配置降低到最少。 为了 继续阅读 >>


贺含悦 18/05/07 22:06:34
注:本文中的部分内容摘抄自他人博客,如有侵权,请联系我,侵删~ 本篇博客主要讲述 synchronized 关键字的实现原理以及 JDK 1.6 后对 synchronized 的种种优化。synchronized 的使用不再赘述。 博主目前依旧存在的疑惑 请在阅读完此篇博客之后,帮助博主回答这三个问题: 多线程争夺 Monitor 的具体过程是怎样的?是根据 ObjectMonitor 中的 _count 值判断当前 Monitor 是否被锁定吗? JVM 如果检测到在单线程环境下执行同步代码(StringBuffer),是会进行锁消除呢,还是会使用偏向锁? 对于偏向锁的撤销过程及膨胀过程,博主只是在一些博客的基础上给出了自己的理解!不权威,建议阅读源码,博主对这部分知识的讲解持怀疑态度,如果在阅读的过程中发现博主对偏向锁的撤销与膨胀理解有误,请指出,感激不尽~(网上基本上没有从源码角度分析的,对于偏向锁撤销与升级的详细过程也是众说纷纭) 引言 我们先来看一份代码: 继续阅读 >>


董恒毅 18/04/27 11:38:27
注:感谢 美团点评技术团队 的分享~~,博客部分内容摘抄自其中。侵删! 今天我们来探究一下 HashMap 的内部实现机制。 明确 JDK 1.8 中的 HashMap 使用数组 + 链表 + 红黑树的结构进行实现。 HashMap 的底层思想主要是哈希表,我们来看看 Java 的设计者们是怎么使用数组 + 链表 + 红黑树设计出 HashMap 的。 HashMap的基本属性 既然是用哈希表进行实现,那么基本的数据结构就是数组了,HashMap 部分源码如下: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { transient Node<K,V>[] table; // HashMap 底层数据结构(Node 数组) transient int size; 继续阅读 >>


董恒毅 18/04/20 21:55:40
Object类 Object类是所有类、数组、枚举类的父类,即Java允许把任何类型的对象赋给Object类型的变量。当定义一个类没有使用extends关键字为它显示指定父类,则该类默认继承Object父类。 //常用方法: boolean equals(Object obj) protected void finalize() Class<?>getClass() int hashCode() String toString() Java还提供了一个protected修饰的clone()方法,该方法用于帮助其他对象来实现“自我克隆”,即得到一个当前对象的副本,而且二者完全隔离。 自定义类实现“克隆”步骤如下: 自定义类实现Cloneable接口。 自定义类实现自己的clone()方法。 实现clone()方法时通过super.clone()。 class Address { String detail; public Address(String d 继续阅读 >>


贺含悦 18/04/13 00:39:52
Problem Description 你想通过交换两个相邻的序列元素来处理一系列n个不同的整数,直到序列按升序排列。然后它需要多少次。 例如,1 2 3 5 4,我们只需要一个操作:交换5和4。 Input 输入由许多测试用例组成。每种情况由两行组成:第一行包含一个正整数n(n <= 1000); 下一行包含从1到n的n个整数的置换。 Output 对于每一种情况,在独立的一行内输出最少交换的次数。 Sample Input 3 1 2 3 4 4 3 2 1 Sample Output 0 6 最近想找个递归分治的题目练练,就碰到这题。该题要求将一个序列中所有相邻逆序的元素恢复成升序的序列。 方法一 最原始的方法,利用两重循环进行枚举。该算法的时间复杂度为O(n^2),这中没什么好说的,虽简单但是效率比较低,不能通过测试。 import java.util.Scanner; public class Main { pub 继续阅读 >>


李猛 18/04/08 20:06:15
今天在用Java写一道去年寒假用C语言刷过的一道特别简单的水题的时候,用到了Java类库的Date、Calendar类,不妨写个总结以便下次复习~ 题目是这样的: 给定一个日期,输出这个日期是该年的第几天 Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成 Output 对于每组输入数据,输出一行,表示该日期是该年的第几天 Sample Input 1985/1/20 2006/3/12 Sample Output 20 71 这是当时用C语言写的代码…虽然AC了但是这样写真的很麻烦= = #include<stdio.h> int main() { int year,mon,day,sum; while(scanf("%d/%d/%d",&year,&mon,&day)!=EOF) { sum=0; switch(mon) { case 1: 继续阅读 >>


贺含悦 18/03/17 22:52:54
方法重写是子类重新定义父类的方法 方法重载发生在同一个类里两个或多个方法的方法名相同但是参数列表不同 1)方法重写的原则: 方法名、参数列表必须与原方法相同 返回类型可以相同也可以是原类型的子类型(从Java SE5开始支持) 重写方法的访问权限不允许缩小,不能比原方法访问性差 重写方法不能比原方法抛出更多的异常 final修饰的方法是无法重写的 private修饰的方法是无法重写的 static修饰的方法是无法重写的 重写发生在运行时,因为编译时编译器不知道并没办法确定该去调用哪个方法,JVM会在代码运行的时候作出决定 2)方法重载的原则: 方法名必须相同 参数列表必须不同(个数、类型、顺序) 返回类型可相同可不相同 重载发生在编译时,因为编译器可以根据参数的类型来选择使用哪个方法 PS:父类的一个方法只能被子类重写一次,而一个方法可以在所有的类中被重载多次;重载是编译时多态,重写是运行时多态 继续阅读 >>


贺含悦 18/03/17 11:46:04
Java支持的数据类型包括两种:基本数据类型、引用类型 1)基本数据类型有8种: byte、short、int、long、float、double、boolean、char 2)引用类型: 如String、包装类等 自动装箱是Java编译器在基本数据类型和对应的对象包装类型间的转化,即int转化为Integer,自动拆箱是Integer调用其方法将其转化为int的过程。 所以自动装箱和拆箱就是基本类型和引用类型之间的转换,至于为什么要转换,因为基本类型转换为引用类型后就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者toString,还有如果集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。 作者:hxllhhy 发表于 2018/03/16 23:52:26 原文链接 https://blog.csdn.net/hxllhhy/article/details/7958825 继续阅读 >>


贺含悦 18/03/16 23:52:26
1)static表示静态的意思,表明一个被其修饰的成员变量(类成员)或者是成员方法(类方法)可以在没有所属类的实例变量的情况下被访问。 2)Java中不可以重写static方法,因为重写Override是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以不可以重写static方法。 PS:Java中也不可以重写一个private方法,因为private方法只能在当前类中被访问,被private修饰的父类方法在子类中是不可见的。 关于Java中的static关键字 static 可以修饰: 变量(所谓 class variable) 方法(所谓 class method) 代码块(所谓 block) 内部类(所谓 nested class) 凡是被 static 修饰的这四种元素,都属于class的元素,即类的,而不是类的实例的。 1)静态变量 静态变量适合用在该变量被该类的所有实例所共享的时候。 静态变量在类被加载的 继续阅读 >>


贺含悦 18/03/14 12:54:29
源码地址:XiyouLinux Group 图书借阅平台 项目地址中包含了一份README,因此对于项目的介绍省去部分内容。这篇博客,主要讲述项目中各个模块的实现细节。 项目概述及成果 首先将本项目使用到技术罗列出来: 使用Spring + Spring MVC进行后台开发 使用Bootstrap和jQuery框架进行前端开发 使用自定义注解与自定义的JdbcRowMapper简化JdbcTemplate对数据库的操作 使用腾讯云的对象存储服务进行图书照片的远程存储 使用MD5加密算法对用户密码在后台进行加密存储 使用过滤器进行一个会话中的身份校验 手动从Spring容器中获取bean 数据库设计中的诸多细节… … 由于前端开发是由团队中的其他人在负责,在加上博主对前端这块并不了解,因此本篇博客并不讨论有关第二点技术实现上的细节。 本项目如README中所述,在后期还有许多需要进行优化的地方。如果你对本项目感兴趣,不妨在GitHub中将 继续阅读 >>


董恒毅 18/03/13 00:22:30