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