⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directsetaccessor.java

📁 webwork in action 源码
💻 JAVA
字号:
package org.hibernate.auction.persistence;import net.sf.hibernate.property.*;import net.sf.hibernate.*;import net.sf.hibernate.util.ReflectHelper;import org.apache.commons.logging.*;import java.lang.reflect.*;import java.beans.Introspector;/** * This property accessor uses a getter method a sets the field directly. * <p> * Much (if not all) of this class has been copied from the Hibernate source. * * @author Christian Bauer <christian@hibernate.org> * @author Gavin King <gavin@hibernate.org> */public class DirectSetAccessor implements PropertyAccessor {	private static final Log log = LogFactory.getLog(DirectSetAccessor.class);	public static final class DirectSetter implements Setter {		private final Field field;		private final Class clazz;		private final String name;		DirectSetter(Field field, Class clazz, String name) {			this.field = field;			this.clazz = clazz;			this.name = name;		}		public Method getMethod() {			return null;		}		public String getMethodName() {			return null;		}		public void set(Object target, Object value) throws HibernateException {			try {				field.set(target, value);			}			catch (Exception e) {				throw new PropertyAccessException(e, "could not set a field value by reflection", true, clazz, name);			}		}	}	public static final class BasicGetter implements Getter {		private Class clazz;		private final Method method;		private final String propertyName;		private BasicGetter(Class clazz, Method method, String propertyName) {			this.clazz=clazz;			this.method=method;			this.propertyName=propertyName;		}		public Object get(Object target) throws HibernateException {			try {				return method.invoke(target, null);			}			catch (InvocationTargetException ite) {				throw new PropertyAccessException(ite, "Exception occurred inside", false, clazz, propertyName);			}			catch (IllegalAccessException iae) {				throw new PropertyAccessException(iae, "IllegalAccessException occurred while calling", false, clazz, propertyName);				//cannot occur			}			catch (IllegalArgumentException iae) {				log.error(					"IllegalArgumentException in class: " + clazz.getName() +					", getter method of property: " + propertyName				);				throw new PropertyAccessException(iae, "IllegalArgumentException occurred calling", false, clazz, propertyName);			}		}		public Class getReturnType() {			return method.getReturnType();		}		public Method getMethod() {			return method;		}		public String getMethodName() {			return method.getName();		}	}	private static Field getField(Class clazz, String name) throws PropertyNotFoundException {		if ( clazz==null || clazz==Object.class ) throw new PropertyNotFoundException("field not found: " + name);		Field field;		try {			field = clazz.getDeclaredField(name);		}		catch (NoSuchFieldException nsfe) {			field = getField( clazz.getSuperclass(), name );		}		if ( !ReflectHelper.isPublic(clazz, field) ) field.setAccessible(true);		return field;	}	private static BasicGetter getGetterOrNull(Class theClass, String propertyName) {		if (theClass==Object.class || theClass==null) return null;		Method method = getterMethod(theClass, propertyName);		if (method!=null) {			if ( !ReflectHelper.isPublic(theClass, method) ) method.setAccessible(true);			return new BasicGetter(theClass, method, propertyName);		}		else {			BasicGetter getter = getGetterOrNull( theClass.getSuperclass(), propertyName );			if (getter==null) {				Class[] interfaces = theClass.getInterfaces();				for ( int i=0; getter==null && i<interfaces.length; i++ ) {					getter=getGetterOrNull( interfaces[i], propertyName );				}			}			return getter;		}	}	private static Method getterMethod(Class theClass, String propertyName) {		Method[] methods = theClass.getDeclaredMethods();		for (int i=0; i<methods.length; i++) {			// only carry on if the method has no parameters			if ( methods[i].getParameterTypes().length==0 ) {				String methodName = methods[i].getName();				// try "get"				if( methodName.startsWith("get") ) {					String testStdMethod = Introspector.decapitalize( methodName.substring(3) );					String testOldMethod = methodName.substring(3);					if( testStdMethod.equals(propertyName) || testOldMethod.equals(propertyName) ) return methods[i];				}				// if not "get" then try "is"				/*boolean isBoolean = methods[i].getReturnType().equals(Boolean.class) ||					methods[i].getReturnType().equals(boolean.class);*/				if( methodName.startsWith("is") ) {					String testStdMethod = Introspector.decapitalize( methodName.substring(2) );					String testOldMethod = methodName.substring(2);					if( testStdMethod.equals(propertyName) || testOldMethod.equals(propertyName) ) return methods[i];				}			}		}		return null;	}	public Setter getSetter(Class theClass, String propertyName)		throws PropertyNotFoundException {		return new DirectSetter( getField(theClass, propertyName), theClass, propertyName );	}	public Getter getGetter(Class theClass, String propertyName) throws PropertyNotFoundException {		BasicGetter result = getGetterOrNull(theClass, propertyName);		if (result==null) throw new PropertyNotFoundException( "Could not find a getter for " + propertyName + " in class " + theClass.getName() );		return result;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -