org.hibernate.util.PropertiesHelper

本文介绍Hibernate3中用于处理属性文件取值的工具类PropertiesHelper。该类为final且仅包含只读方法,确保线程安全。文章详细展示了如何通过默认值处理配置文件中不存在的属性,并提供了多种数据类型的获取方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该类为hibernate3处理属性文件取值的工具类,首先该类是一个final类,且只有private构造函数,即使用者没法继承该类

另外该类的所有方法为只读方法,没有写方法,所以该类又是一个线程安全类,多线程可以放心使用该类,不会出现资源竞争问题

 

该类取值模式值得借鉴,通过传入一个默认值,如果取不到,则直接返回默认值

 

 


package org.hibernate.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.Iterator;


public final class PropertiesHelper {

 private static final String PLACEHOLDER_START = "${";
 private static final String PLACEHOLDER_END = "}";

 public static boolean getBoolean(String property, Properties properties) {
  String setting = properties.getProperty(property);
  return setting != null && Boolean.valueOf( setting.trim() ).booleanValue();
 }

 public static boolean getBoolean(String property, Properties properties, boolean defaultValue) {
  String setting = properties.getProperty(property);
  return setting==null ? defaultValue : Boolean.valueOf( setting.trim() ).booleanValue();
 }

 public static int getInt(String property, Properties properties, int defaultValue) {
  String propValue = properties.getProperty(property);
  return propValue==null ? defaultValue : Integer.parseInt( propValue.trim() );
 }

 public static String getString(String property, Properties properties, String defaultValue) {
  String propValue = properties.getProperty(property);
  return propValue==null ? defaultValue : propValue;
 }

 public static Integer getInteger(String property, Properties properties) {
  String propValue = properties.getProperty(property);
  return propValue==null ? null : Integer.valueOf( propValue.trim() );
 }

 public static Map toMap(String property, String delim, Properties properties) {
  Map map = new HashMap();
  String propValue = properties.getProperty(property);
  if (propValue!=null) {
   StringTokenizer tokens = new StringTokenizer(propValue, delim);
   while ( tokens.hasMoreTokens() ) {
    map.put(
     tokens.nextToken(),
        tokens.hasMoreElements() ? tokens.nextToken() : ""
    );
   }
  }
  return map;
 }

 public static String[] toStringArray(String property, String delim, Properties properties) {
  return toStringArray( properties.getProperty(property), delim );
 }

 public static String[] toStringArray(String propValue, String delim) {
  if (propValue!=null) {
   return StringHelper.split(delim, propValue);
  }
  else {
   return ArrayHelper.EMPTY_STRING_ARRAY;
  }
 }

 /**
  * replace a property by a starred version
  *
  * @param props properties to check
  * @param key proeprty to mask
  * @return cloned and masked properties
  */
 public static Properties maskOut(Properties props, String key) {
  Properties clone = (Properties) props.clone();
  if (clone.get(key) != null) {
   clone.setProperty(key, "****");
  }
  return clone;
 }

 public static void resolvePlaceHolders(Properties properties) {
  Iterator itr = properties.entrySet().iterator();
  while ( itr.hasNext() ) {
   final Map.Entry entry = ( Map.Entry ) itr.next();
   final String value = ( String ) entry.getValue();
   if ( value != null ) {
    final String resolved = resolvePlaceHolder( value );
    if ( !value.equals( resolved ) ) {
     if ( resolved == null ) {
      itr.remove();
     }
     else {
      entry.setValue( resolved );
     }
    }
   }
  }
 }

 public static String resolvePlaceHolder(String property) {
  if ( property.indexOf( PLACEHOLDER_START ) < 0 ) {
   return property;
  }
  StringBuffer buff = new StringBuffer();
  char[] chars = property.toCharArray();
  for ( int pos = 0; pos < chars.length; pos++ ) {
   if ( chars[pos] == '$' ) {
    // peek ahead
    if ( chars[pos+1] == '{' ) {
     // we have a placeholder, spin forward till we find the end
     String systemPropertyName = "";
     int x = pos + 2;
     for (  ; x < chars.length && chars[x] != '}'; x++ ) {
      systemPropertyName += chars[x];
      // if we reach the end of the string w/o finding the
      // matching end, that is an exception
      if ( x == chars.length - 1 ) {
       throw new IllegalArgumentException( "unmatched placeholder start [" + property + "]" );
      }
     }
     String systemProperty = extractFromSystem( systemPropertyName );
     buff.append( systemProperty == null ? "" : systemProperty );
     pos = x + 1;
     // make sure spinning forward did not put us past the end of the buffer...
     if ( pos >= chars.length ) {
      break;
     }
    }
   }
   buff.append( chars[pos] );
  }
  String rtn = buff.toString();
  return StringHelper.isEmpty( rtn ) ? null : rtn;
 }

 private static String extractFromSystem(String systemPropertyName) {
  try {
   return System.getProperty( systemPropertyName );
  }
  catch( Throwable t ) {
   return null;
  }
 }

 

 /*私有构造函数,一般单例模式使用私有构造函数*/
 private PropertiesHelper() {}
}

### 回答1: org.apache.tomcat.util.modeler是一个Java类库,用于管理和监控Tomcat服务器的运行状态。它提供了一组工具和API,可以让开发人员更方便地管理Tomcat服务器的配置和运行。该类库包含了一些核心类,如ModelMBean、ManagedBean、MBeanServer等,这些类可以帮助开发人员实现自定义的MBean,并将其注册到MBeanServer中,从而实现对Tomcat服务器的监控和管理。 ### 回答2: org.apache.tomcat.util.modeler是Apache Tomcat中的一个工具类库,用于管理和操作Java对象的模型。它提供了一套API和工具,可以用于创建、注册、查询和管理Java对象的模型和元数据。 org.apache.tomcat.util.modeler主要有以下几个功能: 1. 创建模型:通过使用ModelMBean接口和相关类,可以创建一个JavaBean对象的模型。这个模型可以包含一些属性、操作和事件,用于描述JavaBean的各种行为和特征。 2. 注册模型:通过使用ModelMBeanRegistration接口和相关类,可以将一个JavaBean对象的模型注册到Tomcat的模型管理器中。注册后,可以通过唯一的ObjectName标识符来访问和操作模型。 3. 查询模型:通过使用ModelMBeanInfo接口和相关类,可以查询模型的元数据信息,包括模型的属性、操作、事件等详细信息。这些信息可以用于动态管理和操作JavaBean对象。 4. 管理模型:通过使用ModelMBean接口和相关类,可以对模型进行一些管理操作,如属性值的设置和获取、操作的调用等。这些操作可以通过Java代码或JMX控制台来执行。 org.apache.tomcat.util.modeler的主要目的是提供一种简单、灵活且可扩展的方式来管理和操作Java对象的模型。它可以广泛应用于Tomcat服务器的管理和监控系统中,也可以作为独立的工具类库在其他Java应用程序中使用。通过使用org.apache.tomcat.util.modeler,开发人员可以更方便地管理和操作Java对象,提高系统的可管理性和可维护性。 ### 回答3: org.apache.tomcat.util.modeler是一个Apache Tomcat服务器的模块,用于管理和操作Java管理扩展(MBeans)。MBeans是一种Java对象,用于管理和监控Java应用程序的运行时行为。 org.apache.tomcat.util.modeler提供了一个框架,可以通过注解或XML配置文件定义MBeans,来监控和管理Java应用程序的各种方面。它通过使用Java动态代理和反射机制来实现动态生成和管理MBeans对象。 通过org.apache.tomcat.util.modeler,可以将Java应用程序的各种组件(如连接池、Servlet、JSP引擎等)以MBeans的形式暴露出来,从而可以通过标准的Java管理扩展API(JMX API)对其进行监控和管理。这些组件的属性和操作可以通过MBeans的属性和方法来获取和设置。 除了管理和监控外,org.apache.tomcat.util.modeler还提供了一些其他功能,例如:描述和验证MBeans的模型,自动生成MBeans的XML描述文件,支持运行时动态加载和卸载MBeans等。 总之,org.apache.tomcat.util.modeler是一个帮助开发人员实现和管理MBeans的工具,为Java应用程序提供了一种方便的方式来监控、管理和诊断运行时行为。它为Apache Tomcat服务器的开发和管理提供了强大的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值