SSM框架中日志的打印和單例模式(六)


一、SSM框架中日志輸出

1、src根目錄下配置log4j.properties文件

#設置輸出級別和輸出目的地#
log4j.rootLogger=info, stdout,logfile

#把信息輸出到控制台#
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

#把信息輸出到目標文件#
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=f://File//arizhi.txt
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.Conversio
nPattern=%d{yyyy-MM-dd HH:mm:ss}%l %F %p %m%n

 

2、創建日志類,並導入log4j的jar包

@Component("myLogger")
public class MyLogger {
    
    private static final Logger logger = Logger.getLogger(MyLogger.class);
    
    public void log(JoinPoint join){
        logger.info(join.getTarget().getClass().getSimpleName()+"的"
                +join.getSignature().getName()+"方法,參數是"
                +Arrays.toString(join.getArgs())+"執行了");
    }
}

3、配置spring核心配置文件

<!-- 日志的輸出 -->
    <aop:config>
        <aop:pointcut expression="execution(* com.action.*.*(..))" id="log"/>
        <aop:aspect ref="myLogger">
            <aop:before method="log" pointcut-ref="log"/>
        </aop:aspect>
    </aop:config>

 

二、單例的兩種模式

1、懶漢模式(類加載時不初始化)

package Singleton;

public class LazySingleton {
    //懶漢式單例模式
    //比較懶,在類加載時,不創建實例,因此類加載速度快,但運行時獲取對象的速度慢
    
    private static LazySingleton intance = null;//靜態私用成員,沒有初始化
    
    private LazySingleton()
    {
        //私有構造函數
    }
    
    public static synchronized LazySingleton getInstance()    //靜態,同步,公開訪問點
    {
        if(intance == null)
        {
            intance = new LazySingleton();
        }
        return intance;
    }
}

  關鍵點:

  1)構造函數定義為私有----不能在別的類中來獲取該類的對象,只能在類自身中得到自己的對象

  2)成員變量為static的,沒有初始化----類加載快,但訪問類的唯一實例慢,static保證在自身類中獲取自身對象

  3)公開訪問點getInstance: public和synchronized的-----public保證對外公開,同步保證多線程時的正確性(因為類變量不是在加載時初始化的)

 

2、餓漢模式(在類加載時就完成了初始化,所以類加載較慢,但獲取對象的速度快)

public class EagerSingleton {
    //餓漢單例模式
    //在類加載時就完成了初始化,所以類加載較慢,但獲取對象的速度快
    
    private static EagerSingleton instance = new EagerSingleton();//靜態私有成員,已初始化
    
    private EagerSingleton() 
    {
        //私有構造函數
    }
    
    public static EagerSingleton getInstance()    //靜態,不用同步(類加載時已初始化,不會有多線程的問題)
    {
        return instance;
    }
}

  關鍵點:

  1)私有構造函數

  2)靜態私有成員--在類加載時已初始化

  3)公開訪問點getInstance-----不需要同步,因為在類加載時已經初始化完畢,也不需要判斷null,直接返回

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM