- 浏览: 256054 次
- 性别:
- 来自: 南京
-
文章分类
最新评论
-
mabusyao:
漠北空城 写道请问下,你这个是JDK版本是多少呢?!忘记了,应 ...
HashMap 源码解读 -
漠北空城:
请问下,你这个是JDK版本是多少呢?!
HashMap 源码解读 -
schumee:
完美团队~
项目沉思录 - 1.1 -
winie:
整理下 搞成引擎嘛 国产需要这样的engine
简单工作流引擎 -
mabusyao:
某位同学给我提供的堪称完美的解决方案:1. 将三个int数组放 ...
CraneWork
看了STRUTS2的源码,了解了它的logging系统,觉得还是蛮有意思的,用到了很多设计模式。
先看类结构图:
1. 工厂方法模式
这个就不说了,直接明了。
2. 伪单例模式
LoggerFactory是个抽象方法,同时里面也包含了对于LoggerFactory的伪单例实现。为什么是伪单例,因为看起来像是单例模式,但其实你也可以创建多个实例:
public static void setLoggerFactory(LoggerFactory factory) { lock.writeLock().lock(); try { LoggerFactory.factory = factory; } finally { lock.writeLock().unlock(); } } protected static LoggerFactory getLoggerFactory() { lock.readLock().lock(); try { if (factory != null) { return factory; } } finally { lock.readLock().unlock(); } lock.writeLock().lock(); try { if (factory == null) { try { Class.forName("org.apache.commons.logging.LogFactory"); factory = new com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory(); } catch (ClassNotFoundException ex) { // commons logging not found, falling back to jdk logging factory = new JdkLoggerFactory(); } } return factory; } finally { lock.writeLock().unlock(); } }
这里还用到了concurrent包里面的ReentrantReadWriteLock锁,看着使用方法貌似还蛮简单的,以后可以将这个类放到工具箱里。
3. 模板方法模式
LoggerFactory:
public static Logger getLogger(Class<?> cls) { return getLoggerFactory().getLoggerImpl(cls); } public static Logger getLogger(String name) { return getLoggerFactory().getLoggerImpl(name); } protected abstract Logger getLoggerImpl(Class<?> cls); protected abstract Logger getLoggerImpl(String name);
JdkLoggerFactory:
public class JdkLoggerFactory extends LoggerFactory { @Override protected Logger getLoggerImpl(Class<?> cls) { return new JdkLogger(java.util.logging.Logger.getLogger(cls.getName())); } @Override protected Logger getLoggerImpl(String name) { return new JdkLogger(java.util.logging.Logger.getLogger(name)); } }
4. 代理模式
JDKLogger并没有做任何事情,而是直接代理给了java.util.logging.Logger类:
public class JdkLogger implements Logger { private java.util.logging.Logger log; public JdkLogger(java.util.logging.Logger log) { this.log = log; } public void error(String msg, String... args) { log.log(Level.SEVERE, LoggerUtils.format(msg, args)); } ... }
发表评论
-
大数据下的实体解析
2016-07-07 12:03 671大数据时代的实体解析困境 <!--[if !sup ... -
中文相似度匹配算法
2015-12-30 14:44 1921基于音形码的中文字 ... -
各种语言写的wordcount
2015-09-24 16:07 0Java版本: String input ... -
数组双指针算法的研究
2015-07-14 16:59 2475双指针算法在数组/链 ... -
初识ThreadLocal
2015-07-07 13:15 1530最近公司在进行Java开发人员的招聘活动,其中有一道面试题 ... -
摩尔投票法
2015-06-30 20:13 18455摩尔投票法 提问: 给定一个int型数组,找出该数 ... -
(转)最长回文字串算法
2015-01-18 14:30 1447来自(http://blog.163.com/zhaohai ... -
小心寄存器
2012-11-08 13:53 4试试这段代码就知道了 public cla ... -
简单工作流引擎
2012-07-06 16:58 2424从公司的一个项目中挖出来的工作流引擎的代码,虽然是一个很简单的 ... -
Always clean the ThreadLocal variables.
2012-05-24 09:16 1226Any variable stored in ThreadLo ... -
在线词典的数据结构实现。
2012-05-18 08:37 0昨天在网上看到了一道百度的面试题: Baidu写道 ... -
Log4j 代码学习 - Factory
2012-05-17 08:47 1120我们最早提到,Log4j的初始代码在LogManager的静态 ... -
Log4j 代码学习 - Appender
2012-05-16 09:09 1374在上一篇文章里,我们 ... -
Log4j 代码学习
2012-05-15 14:58 1174最近闲来无事,正好手头上有Log4j的代码,于是就拿来学习了下 ... -
存储中间计算结果的动态规划算法
2012-04-18 15:50 1227public class RodCutting { ... -
java7中的ThreadLocalRandom(转)
2012-01-20 09:08 4374今天早上看到一个关于java7中的ThreadLocalRan ... -
(转)追MM与23种设计模式
2011-11-16 14:13 10081、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德 ... -
(转)Java 参数列表
2011-11-05 19:48 2963下面的讨论以Windows ... -
(转)TOMCAT源码分析
2011-10-17 16:06 2167TOMCAT源码分析(启动框架 ... -
java写的四则运算器
2011-08-19 22:19 2757本打算做一个从RE到NFA的转换器,思路已经理清了,但是在动手 ...
相关推荐
接下来介绍如何使用源码构建 Struts,以下步骤以 Windows 2000 系统为例: - **操作系统**:Windows 2000 - **JDK**:j2sdk1.3 - **Ant**:ant1.4.1 - **XML Parser**:Xalan 2.3.1 - **Xalan XSLT Processor**:...
该项目使用的jar包为以下. spring-beans.jar xwork-2.0.4.jar spring-context.jar ognl-2.6.11.jar spring-web.jar spring-core.jar struts2-core-2.0.11.1.jar commons-logging-...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化和灵活的Web应用程序。日志拦截器在Struts2中扮演着至关重要的角色,它允许开发者记录和控制应用程序中的各种操作,以便于调试、性能分析和日志...
Log4j2可以轻松地与Spring Boot、Struts2、Hibernate等框架集成,为这些框架提供统一的日志记录。 **七、源码分析** Log4j2的源码清晰易读,学习源码可以帮助理解其工作原理,比如日志事件的处理流程、配置解析机制...
- **Struts2**:作为后端框架,负责处理HTTP请求并提供数据服务。 - **jQuery EasyUI**:一个基于jQuery的UI插件集合,简化前端页面开发。 - **Java Applet**:用于实现跨平台的客户端功能,如打印操作等。 - **...
他们提供了一系列针对 JSP、JavaServer Faces、Struts、Spring、Hibernate 和 EJB 等技术的深度教程和支持服务。 - **源码下载**:本教程的相关源码可以从 http://www.laliluna.de/download/log4j-tutorial.zip 下载...