原创 代碼優化----使用builder模式構造對象

看《effective java》的時候,創建對象章節提到使用builder模式來創建對象。覺得非常好用,做一個記錄。以後應該就會這麼寫啦~~~~~~ 對於一個有很多屬性的類,在爲屬性賦值時,通常會用到兩種方式,構造函數或者set方法。

原创 線程安全性--volatile

volatile:當多個線程進行操作共享數據時,可以保證內存中的數據是可見的; @Slf4j public class MyVolatile { public static void main(String[] args) {

原创 線程池

new Thread弊端 每次new Thread新建對象,性能差 線程缺乏統一管理,可能無限制的新建線程,相互競爭,有可能佔用過多系統資源導致死機 缺乏高級功能,如:更多執行、定期執行、線程終端等 線程池的好處 重用存在的線程,減少

原创 simpleDateFormat線程不安全

simpleDateFormat是我們比較常用的日期轉換類,但是它是一個線程不安全的類。 舉例證明 public class DateFormatExample1 { //請求總數 private static int

原创 動態代理 原

具體場景 爲了使代理類與被代理類對第三方有相同的函數,代理類與被代理類一般實現一個公共的interface,定義如下 public interface Subject { void rent(); void hello(

原创 FactoryBean組件註冊 原

spring提供了一個FactoryBean這樣的一個接口,使得用戶可以通過實現這個接口來定製實例化bean的邏輯。這種註冊方式多用於spring整合第三方框架的時候。 public interface FactoryBean<T> {

原创 考慮用靜態工廠方法代替構造器 原

對於類而言,爲了讓客戶端獲取它自身的一個實例,最常用的方法就是提供一個共有的構造器。還有一種方法,也應該在每個程序員的工具箱佔有一席之地。類可以提供一個共有的靜態工廠方法,它只是一個返回類的實例的靜態方法。比如Boolean的簡單示例:

原创 mybatis--裝飾模式 原

裝飾模式的具體分析可以參考之前的文章,裝飾模式. 在學習mybatis源碼的時候,再次發現executor包下的代碼用了裝飾模式。 org.apache.ibatis.session.Configuration下的 public Execu

原创 spring常見註解 ----Scope 原

@Scope的作用  調整組件的作用域 package common.config; import common.bean.Person; import org.springframework.context.annotation.

原创 @Profile註解與@Conditional註解 原

@Profile註解:是spring爲我們提供的可以根據當前環境,動態的激活和切換一系列組件的功能。 @Conditional:按照一定的條件進行判斷,滿足條件則給容器中注入bean @Profile代碼示例: package common

原创 單例模式 原

第一種方式 public class SingletonA { public static final SingletonA INSTANCE = new SingletonA(); private Singleton

原创 pagehelper超過頁數仍然可以查出數據 原

spring boot中pageHelper的使用 pom文件中添加 <!--pagehelper --> <dependency> <groupId>com.github.pagehelper

原创 線程安全性--atomic 原

線程安全性是指: 當多個線程訪問某個類時,不管運行時環境採用何種調度方式或者這些進程將如何交替執行,並且在主調代碼中不需要任何額外的同步或協調,這個類都能表現出正確的行爲,則稱這個類時線程安全的。 線程安全性的三個方面: 原子性:提供了互

原创 java反射 原

java反射機制定義 java反射機制是指在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象方法的功能稱爲java語言的反射機制。 @T

原创 mybatis使用對象傳入參數,sql中顯示的參數始終爲‘null’字符串 原

1.service層 @Override public Role getRoleByType(String type,String orgId) { RoleType roleType = new RoleT