原创 Spring筆記(10) - 日誌體系 logback的使用和logback.xml詳解

一、概況   在項目開發當中,日誌對於我們開發或運維人員來說,是一個必不可少的工具。在線下我們可以通過 debug 來查找排除問題,但對於線上系統來說,我們只能通過日誌分析來查找問題,我們可以通過日誌打印來獲取我們需要的信息來判斷、分析系統

原创 Spring筆記(9) - IOC實現方式詳解

  IOC概念    控制反轉(Inversion of Control,IOC),是面向對象編程中的一種設計原則,它建議將不需要的職責移出類,讓類專注於核心職責,從而提供鬆散耦合,提高優化軟件程序設計。它把傳統上由程序代碼直接操控的對象的

原创 Spring筆記(8) - @EventListener註解探究 Spring的BeanFactoryPostProcessor探究

  在上文中講了Spring的事件監聽機制,流程是:定義事件、監聽器,發佈事件,控制檯輸出監聽到的事件內容。   在上文的擴展中 使用 @EventListener 註解來自定義監聽器,監聽指定的事件,比如下面的案例: @Componen

原创 Spring筆記(7) - Spring的事件和監聽機制

一.背景   事件機制作爲一種編程機制,在很多開發語言中都提供了支持,同時許多開源框架的設計中都使用了事件機制,比如SpringFramework。   在 Java 語言中,Java 的事件機制參與者有3種角色:     1.Event

原创 Spring筆記(6) - Spring的BeanFactoryPostProcessor探究 Spring筆記(2) - 生命週期/屬性賦值/自動裝配及部分源碼解析

一.背景   在說BeanFactoryPostProcessor之前,先來說下BeanPostProcessor,在前文Spring筆記(2) - 生命週期/屬性賦值/自動裝配及部分源碼解析中講解了BeanPostProcessor是一個

原创 正則表達式性能優化的探究

一.背景   前文的String字符串性能優化的探究中的第3點講述了Split() 方法使用了正則表達式實現了其強大的分割功能,而正則表達式的性能是非常不穩定的,使用不恰當會引起回溯問題。那麼今天詳細探討下正則表達式。   正則表達式是計算

原创 String字符串性能優化的探究

一.背景   String 對象是我們使用最頻繁的一個對象類型,但它的性能問題卻是最容易被忽略的。String 對象作爲 Java 語言中重要的數據類型,是內存中佔用空間最大的一個對象,高效地使用字符串,可以提升系統的整體性能,比如百M內存

原创 Spring筆記(5) - 聲明式事務@EnableTransactionManagement註解源碼分析

一.背景   前面詳解了實現Spring事務的兩種方式的不同實現:編程式事務和聲明式事務,對於配置都使用到了xml配置,今天介紹Spring事務的註解開發,例如下面例子: 配置類:註冊數據源、JDBC模板、事務管理器 //包掃描,將包下

原创 Jenkins+tomcat自動發佈的熱部署/重啓及遇到的坑解決辦法

一.背景   公司的項目一直手動maven打包、上傳服務器、關閉/開啓tomcat,整個流程下來耗時耗力,雖然可以將所有流程通過shell腳本一次性解決,但如果可以通過idea的Jenkins插件一鍵自動部署,那更省時省力。   下面是一個

原创 Spring筆記(3) - debug源碼AOP原理解析

案例 @EnableAspectJAutoProxy//開啓基於註解的aop模式 @Configuration public class AOPConfig { //業務邏輯類加入容器中 @Bean publi

原创 多線程高併發編程(12) -- 阻塞算法實現ArrayBlockingQueue源碼分析

一.前言   前文探究了非阻塞算法的實現ConcurrentLinkedQueue安全隊列,也說明了阻塞算法實現的兩種方式,使用一把鎖(出隊和入隊同一把鎖ArrayBlockingQueue)和兩把鎖(出隊和入隊各一把鎖LinkedBloc

原创 多線程高併發編程(11) -- 非阻塞算法實現ConcurrentLinkedQueue源碼分析

  一.背景   要實現對隊列的安全訪問,有兩種方式:阻塞算法和非阻塞算法。阻塞算法的實現是使用一把鎖(出隊和入隊同一把鎖ArrayBlockingQueue)和兩把鎖(出隊和入隊各一把鎖LinkedBlockingQueue)來實現;非阻

原创 多線程高併發編程(10) -- ConcurrentHashMap源碼分析

  一.背景   前文講了HashMap的源碼分析,從中可以看到下面的問題: HashMap的put/remove方法不是線程安全的,如果在多線程併發環境下,使用synchronized進行加鎖,會導致效率低下; 在遍歷迭代獲取時進行修改

原创 Spring筆記(2) - 生命週期/屬性賦值/自動裝配

一.生命週期 @Bean自定義初始化和銷燬方法 //====xml方式: init-method和destroy-method==== <bean id="person" class="com.hrh.bean.Person"

原创 Spring筆記(1) - 組件註冊

@Bean:類注入容器 xml方式: <bean id="person" class="com.hrh.bean.Person"> <property name="name" value="張三"></property>