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,直接返回

原文地址:https://www.cnblogs.com/newbest/p/9215746.html