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

  • 相关阅读:
    java 中的Debug eclipse 开发工具使用
    google 浏览器的Debug 调试工具使用
    java 实现word 转 pdf
    你好啊 未来的自己
    java 实现在线阅读 .pdf
    java 的在线下载文件 .pdf
    Java 实现手机发送短信验证码
    Java 实现发送邮件
    Java 实现邮件的发送
    沃尔沃投资两家以色列科技创企 布局人工智能
  • 原文地址:https://www.cnblogs.com/newbest/p/9215746.html
Copyright © 2020-2023  润新知