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

  • 相关阅读:
    开发笔记-图片拉伸保持不变形
    开发笔记-简单渐变动画的实现
    开发笔记- iOS监听某些事件的方法简单梳理
    开发笔记-UIApplication代理
    开发笔记-UIApplication单例
    常见的UNIX命令
    知识点回顾-简单的TableView单组数据展示/多组数据展示
    开发技巧-改变按钮属性3部曲
    字典--plist
    如何使用JS实现页面内容随机显示
  • 原文地址:https://www.cnblogs.com/newbest/p/9215746.html
Copyright © 2020-2023  润新知