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

时间: 2024-11-10 14:55:42

SSM框架中日志的打印和单例模式(六)的相关文章

SSM框架中使用Spring的@Transactional注解进行事务管理

一 介绍 在企业级应用中,保护数据的完整性是非常重要的一件事.因此不管应用的性能是多么的高.界面是多么的好看,如果在转账的过程中出现了意外导致用户的账号金额发生错误,那么这样的应用程序也是不可接受的 数据库的事务管理可以有效地保护数据的完整性(PS:关于数据库的事务管理基础可以参考我以前写过的这篇文章:http://www.zifangsky.cn/385.html),但是原生态的事务操作需要写不少的代码,无疑是非常麻烦的.在使用了Spring框架的应用中,我们可以使用@Transactiona

SSM框架中以注解形式实现事务管理

上一篇博文<SSM三大框架整合详细教程>详细说了如何整合Spring.SpringMVC和MyBatis这三大框架.但是没有说到如何配置mybatis的事务管理,实现开发中,事务是必不可少的.本篇作为对上一篇的补充,说明在SSM框架中如何使用注解的形式进行事务管理. 什么是事务? 在编写业务的过程中,会需要进行事务处理,当需要执行多条插入语句时,如果前几条成功,而最后一条失败,那么我们需要回滚数据库操作,保持数据的一致性和完整性,此时,就需要利用DB的事务处理.事务是恢复和并发控制的基本单位.

SSM框架中数据库无法连接的问题

首先是SSM框架中所有的配置都是没有问题的,而且项目在其他人的环境上也能正常访问数据库:那么最有可能的就是数据库版本的问题导致数据库连接不上,服务器给我的报错是: 15:37:25.902 [C3P0PooledConnectionPoolManager[identityToken->1hge4n5a4xz7ohp18togle|54666959]-HelperThread-#0] DEBUG c.m.v.resourcepool.BasicResourcePool - An exception

ssm框架中的乱码问题的解决

在搭建ssm框架过程中可能会出现乱码的问题,解决的最好方法就是不管在哪儿都设置为utf-8: 统一编码格式,所有的都设置为utf-8: 首先的就是将所有的请求设置为utf-8: 设置post请求的编码是在web.xml中设置一个过滤器,这个是ssm框架自带的,非常方便: <!-- Spring字符集过滤 --> 2. <filter> 3. <description>字符集过滤器</description> 4. <filter-name>enc

SSM框架中使用日志框架

在 pom,xml 配置 Log4j jar 添加一个 mybatis_log.xml 文件 完整配置信息 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.

深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用

SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致. service层.存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方

SSM框架中常用的注解

@Controller:在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestPar

SSM框架中测试单元的使用,spring整合Junit

测试类中的问题和解决思路   3.1.1     问题 在测试类中,每个测试方法都有以下两行代码: ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); IAccountService as = ac.getBean("accountService",IAccountService.class); 这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常.所以又不能轻易删

SSM框架中mapper和mapping.xml文件在同一个包下需要的配置

前言 当我们在开发过程中,由于maven项目本身的限制,我们不能直接把我们的mapper.xml文件和对应mapper.java接口文件放到一起,也就是不能直接放在java包中,如图:  因为maven项目在构建打包时,会从src/main/java中获取所有的java文件然后编译,会从src/main/resources中获取配置文件等其它文件,然后打包, 所以尽管你在Spring整合Mybatis时配置也好,在Mybatis单独的配置文件中配置也好,都是会出错的: <!--配置SqlSess