- 浏览: 122154 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
roychenyi:
<br>1<br>2<br> ...
pager-taglib 使用说明 -
roychenyi:
<br>换行<br>换行<br& ...
pager-taglib 使用说明 -
wangwenfei1985:
[flash=200,200][url][img][list] ...
pager-taglib 使用说明 -
时光后19:
,看到你这样真好,
FileNet调用webService配置 -
ysen:
大sql导入mysql
如果是SQL格式的。有的可能上100 ...
mysqldump备份详解
单例模式的实现方法有很多,饿汉和饱汉 ,Double-check Locking的模式, Registry of Singleton 模式
这里介绍下单例策略
在dom4j中就生成DocumentFactory工厂单例的时候就有单例策略的使用。
策略的介面如下:
public interface SingletonStrategy { /** * return a singleton instance of the class specified in setSingletonClass */ Object instance(); /** * reset the instance to a new instance for the implemented strategy */ void reset(); void setSingletonClassName(String singletonClassName); }
策略的两个实作:
1、
public class SimpleSingleton implements SingletonStrategy { //singletonClassName 需要被实例化成单例的类名,在DocumentFactory 中通过配置文件传值 private String singletonClassName = null; //singletonInstance 通过 reset() 返回单例的实例对象 private Object singletonInstance = null; public SimpleSingleton() { } //只是返回实例的对象方法 public Object instance() { return singletonInstance; } //used by setSingletonClassName() 产生不同的单例实例对象 public void reset() { if (singletonClassName != null) { Class clazz = null; try { clazz = Thread.currentThread().getContextClassLoader().loadClass( singletonClassName); singletonInstance = clazz.newInstance(); } catch (Exception ignore) { try { clazz = Class.forName(singletonClassName); singletonInstance = clazz.newInstance(); } catch (Exception ignore2) { } } } } //传进去singletonClassName 生成 一个实例 ,通过instance()取得单例 public void setSingletonClassName(String singletonClassName) { this.singletonClassName = singletonClassName; reset(); } }
2、每个线程一个单例实例对象,没这么用过不知道一般用在什么地方
public class PerThreadSingleton implements SingletonStrategy { private String singletonClassName = null; private ThreadLocal perThreadCache = new ThreadLocal(); public PerThreadSingleton() { } //重置每个线程的单例对象 public void reset() { perThreadCache = new ThreadLocal(); } // public Object instance() { Object singletonInstancePerThread = null; // use weak reference to prevent cyclic reference during GC WeakReference ref = (WeakReference) perThreadCache.get(); // singletonInstancePerThread=perThreadCache.get(); // if (singletonInstancePerThread==null) { if (ref == null || ref.get() == null) { Class clazz = null; try { clazz = Thread.currentThread().getContextClassLoader().loadClass( singletonClassName); singletonInstancePerThread = clazz.newInstance(); } catch (Exception ignore) { try { clazz = Class.forName(singletonClassName); singletonInstancePerThread = clazz.newInstance(); } catch (Exception ignore2) { } } perThreadCache.set(new WeakReference(singletonInstancePerThread)); } else { singletonInstancePerThread = ref.get(); } return singletonInstancePerThread; } public void setSingletonClassName(String singletonClassName) { this.singletonClassName = singletonClassName; } }
3、需要实现的单例类
public class DocumentFactory implements Serializable { //关联一个单例策略对象 private static SingletonStrategy singleton = null; protected transient QNameCache cache; /** Default namespace prefix -> URI mappings for XPath expressions to use */ private Map xpathNamespaceURIs; // used by getInstance() 创建单例策略对象 并将DocumentFactory 的classname set 给它 ,返回单例策略对象 private static SingletonStrategy createSingleton() { SingletonStrategy result = null; //通过配置文件得到DocumentFactory 的classname String documentFactoryClassName; try { documentFactoryClassName = System.getProperty("org.dom4j.factory", "org.dom4j.DocumentFactory"); } catch (Exception e) { documentFactoryClassName = "org.dom4j.DocumentFactory"; } try { String singletonClass = System.getProperty( "org.dom4j.DocumentFactory.singleton.strategy", "org.dom4j.util.SimpleSingleton"); Class clazz = Class.forName(singletonClass); result = (SingletonStrategy) clazz.newInstance(); } catch (Exception e) { result = new SimpleSingleton(); } result.setSingletonClassName(documentFactoryClassName); return result; } public DocumentFactory() { init(); } /** * <p> * Access to singleton implementation of DocumentFactory which is used if no * DocumentFactory is specified when building using the standard builders. * </p> * * @return the default singleon instance */ //DocumentFactory 创建自己的方法 线程安全的 public static synchronized DocumentFactory getInstance() { if (singleton == null) { singleton = createSingleton(); } return (DocumentFactory) singleton.instance(); }
发表评论
-
email 发送接口
2012-02-29 17:48 1526企业邮件发送有自己的发送平台,其它系统包括业务系统常常将发送邮 ... -
OOD原则
2010-03-09 16:51 1339单一职责原则(SRP) 就一个类而言,应该仅有一个引起它 ... -
GRASP(基于职责设计对象)
2010-03-09 16:41 1444GRASP(General Responsibility A ... -
女友的对话(中介者模式也叫调停者)
2010-01-02 20:40 902需要中介者对象作为通信控制平台 所操控的抽象对象 ... -
请假 加薪(职责链模式)
2009-12-30 20:50 1250学习笔记 职责链模式的结构 和装饰模式的结构是一样的。 ... -
如何换数据库(未使用任何框架)
2009-12-18 04:25 929因为之前使用的mysql 现在想转为Oracle实现 ... -
和女友的不愉快(访问者模式)
2009-12-13 13:59 1024老鸟飞过哈 最近和女友很不和,特此用段模式写下自己的状 ... -
起床做饭(观察者模式)
2009-12-10 23:02 1072//通知者 public class Boy { //状 ... -
朋友做客(外观模式或者门面模式)
2009-12-10 01:12 849老鸟飞过 package facade; /* ... -
城市的生活成本(模板方法)
2009-12-09 16:50 872public abstract class Boy { ... -
女友多的好处2(工厂方法)
2009-12-08 01:01 1406(老鸟略过) 之前的一篇简单方法模式连接地址 http:/ ... -
带女友干活(代理模式)
2009-12-06 23:22 1305老鸟跳过请跳过, 最近无聊,贴一些自己过去学习设计模式 ... -
老公爱吃的菜(策略模式)
2009-12-06 00:09 965将策略的上下文的构造函数换用简单工厂模式的话就将业务对象封装起 ... -
陪她们依次去旅游(装饰模式)
2009-12-05 21:52 835//梦中情人 呵呵 public c ... -
女友多的好处 (简单工厂模式)
2009-12-05 21:47 1207java 的switch 语句的case 匹配为什么不能像de ... -
不同的年龄阶段喜欢不同的女孩 (状态模式)
2009-12-05 21:32 1153讨媳妇的男孩 public class Boy { ...
相关推荐
4. Vue中的$nextTick有什么作用? Vue中的$nextTick是一个函数,它可以将回调函数放入callbacks等待执行,然后将执行函数放到微任务或者宏任务中。事件循环到了微任务或者宏任务,执行函数依次执行callbacks中的回...
DOM4J是一个Java XML处理库,它与设计模式的结合可能涉及到解析XML文档时如何应用模式,比如使用模板方法模式处理XML数据,或者用策略模式来实现不同的解析策略。 4. **classroomPractice**: 这可能是课堂练习的...
4. `dom4j-1.6.1.jar`:DOM4J是一个流行的XML处理库,Hibernate用它来读写XML配置文件。 5. `javassist.jar`:另一种用于字节码操作的库,Hibernate也可以使用它来生成代理类。 6. `commons-collections.jar`:...
- 随后,开发者会接触到诸如dom4j、jdom、log4j、Hibernate、Spring、iBatis、Struts等开源框架。 - 数据交换中,JSON和XML的封装和解析是必备技能,正则表达式也在开发中扮演重要角色。 - 开发环境如Tomcat、...
`dom4j.jar`处理XML文档,`slf4j-api.jar`和`slf4j-log4j12.jar`是日志记录接口及其实现,`antlr-2.7.7.jar`用于解析HQL和JPQL。还有其他如`javassist.jar`等辅助库,它们共同构建了Hibernate的完整生态。 6. **...
- **设计模式**:熟悉GoF设计模式(Gang of Four),了解J2EE设计模式,掌握常见的设计模式如单例模式、工厂模式、策略模式等,并理解它们在实际项目中的应用场景。 - **UML图**:学会绘制并阅读类图(Class Diagram)...
8. **dom4j.jar**:Hibernate3中使用的XML处理库。 9. **javassist.jar**:动态类生成库,Hibernate用其来实现懒加载和动态代理。 **总结** 这个压缩包可能是为了搭建一个基于Hibernate3的Java J2EE项目环境而...
5. **dom4j.jar**:用于XML处理,Hibernate使用它解析和生成配置文件。 6. **javassist.jar**:动态字节码生成库,Hibernate使用它在运行时生成实体类的代理。 7. **jboss-jdbc驱动.jar**:特定数据库的JDBC驱动,如...
- **参考资源**: 在使用Velocity时,开发者需要了解其依赖的库,例如Apache Commons Logging,用于日志记录,以及可能的模板解析库,如JDOM或DOM4J,用于处理XML结构的模板。 - **它是如何工作的?**: Velocity...
- 在项目中,通常会使用如Log4j、Logback等日志框架来记录系统运行信息,方便调试和问题排查。 9. XML和JSON解析: - Java提供了多种库用于XML和JSON的解析,如DOM、SAX、StAX用于XML解析,而Jackson、Gson、...
7. **日志和异常处理**:良好的日志记录和异常处理机制能帮助开发者追踪和解决运行时的问题,例如使用log4j进行日志记录。 8. **设计模式**:在编写爬虫代码时,可以运用工厂模式、单例模式等设计模式,提高代码的...
11. **XML处理**:学习XML解析API,如JAXP、JDOM、DOM4J和JAXR,理解XML在Java中的应用。 12. **Web服务**:构建和消费Web服务,使用JAX-RPC、SAAJ、JAXB、JAXM和JWSDP等API。 13. **轻量级框架**:了解Spring、...
为了便于问题排查和系统监控,应集成日志框架,如Log4j或SLF4J,记录请求的细节和可能出现的错误信息。此外,可以使用Prometheus或ELK Stack等工具进行性能和错误监控。 9. **代码结构与设计模式**: 保持良好的...
- 使用`java.util.logging`或log4j记录爬虫运行过程中的信息,方便调试和监控。 10. **代码结构与设计模式**: - MVC模式:将爬虫分为模型(数据处理)、视图(结果展示)和控制器(业务逻辑)三部分。 - 单例...
4. **Hadoop权威指南**:Hadoop是大数据处理的开源框架,这本书可能提供了Hadoop的架构分析、数据存储和处理策略,以及如何在企业环境中部署和优化Hadoop集群。 这些知识点覆盖了Java EE领域的广泛内容,从基本编程...
Spring使用DOM4J库解析XML配置文件。以下代码片段展示了基本的解析逻辑,包括创建`SAXReader`读取XML,遍历XML文档节点,根据节点类型创建和初始化对象: ```java public class ClassPathXmlApplicationContext ...
- **日志记录**:通过`java.util.logging`或Log4j记录爬取过程,便于调试和监控。 5. **异常处理**: - **网络异常**:处理网络请求时可能出现的IOException,如连接超时、网络中断等。 - **解析异常**:Jsoup在...
本题目要求设计四个线程,其中两个线程用于增加一个全局变量j的值,另外两个用于减少j的值。需要注意线程安全问题,确保操作的原子性和同步。 13. 大数据量分页处理:在处理大数据量时,为了提高效率,通常会采用...
20. **日志框架**:如Log4j,它是Java中广泛使用的一个日志记录库。 21. **XML处理**:DOM、SAX解析器的使用,XML文档的创建和解析是Java企业级应用中的基本技能。 22. **设计模式**:在软件工程中,设计模式是对...