📄 beanificationtestcase.java
字号:
signal.setBean(BeanUtilsBean.getInstance()); signal.setConvertUtils(ConvertUtilsBean.getInstance()); signal.setPropertyUtils(PropertyUtilsBean.getInstance()); } public String toString() { return "GetBeanUtilsBeanThread"; } } Signal signal = new Signal(); signal.setSignal(1); GetBeanUtilsBeanThread thread = new GetBeanUtilsBeanThread(signal); thread.setContextClassLoader(new TestClassLoader()); thread.start(); thread.join(); assertEquals("Signal not set by test thread", 2, signal.getSignal()); assertTrue( "Different BeanUtilsBean instances per context classloader", BeanUtilsBean.getInstance() != signal.getBean()); assertTrue( "Different ConvertUtilsBean instances per context classloader", ConvertUtilsBean.getInstance() != signal.getConvertUtils()); assertTrue( "Different PropertyUtilsBean instances per context classloader", PropertyUtilsBean.getInstance() != signal.getPropertyUtils()); } /** * Tests whether difference instances are loaded by different * context classloaders. */ public void testContextClassLoaderLocal() throws Exception { class CCLLTesterThread extends Thread { private Signal signal; private ContextClassLoaderLocal ccll; CCLLTesterThread(Signal signal, ContextClassLoaderLocal ccll) { this.signal = signal; this.ccll = ccll; } public void run() { ccll.set(new Integer(1789)); signal.setSignal(2); signal.setMarkerObject(ccll.get()); } public String toString() { return "CCLLTesterThread"; } } ContextClassLoaderLocal ccll = new ContextClassLoaderLocal(); ccll.set(new Integer(1776)); assertEquals("Start thread sets value", new Integer(1776), ccll.get()); Signal signal = new Signal(); signal.setSignal(1); CCLLTesterThread thread = new CCLLTesterThread(signal, ccll); thread.setContextClassLoader(new TestClassLoader()); thread.start(); thread.join(); assertEquals("Signal not set by test thread", 2, signal.getSignal()); assertEquals("Second thread preserves value", new Integer(1776), ccll.get()); assertEquals("Second thread gets value it set", new Integer(1789), signal.getMarkerObject()); } /** Tests whether calls are independent for different classloaders */ public void testContextClassloaderIndependence() throws Exception { class TestIndependenceThread extends Thread { private Signal signal; private PrimitiveBean bean; TestIndependenceThread(Signal signal, PrimitiveBean bean) { this.signal = signal; this.bean = bean; } public void run() { try { signal.setSignal(3); ConvertUtils.register(new Converter() { public Object convert(Class type, Object value) { return new Integer(9); } }, Integer.TYPE); BeanUtils.setProperty(bean, "int", new Integer(1)); } catch (Exception e) { e.printStackTrace(); signal.setException(e); } } public String toString() { return "TestIndependenceThread"; } } PrimitiveBean bean = new PrimitiveBean(); BeanUtils.setProperty(bean, "int", new Integer(1)); assertEquals("Wrong property value (1)", 1, bean.getInt()); ConvertUtils.register(new Converter() { public Object convert(Class type, Object value) { return new Integer(5); } }, Integer.TYPE); BeanUtils.setProperty(bean, "int", new Integer(1)); assertEquals("Wrong property value(2)", 5, bean.getInt()); Signal signal = new Signal(); signal.setSignal(1); TestIndependenceThread thread = new TestIndependenceThread(signal, bean); thread.setContextClassLoader(new TestClassLoader()); thread.start(); thread.join(); assertNull("Exception thrown by test thread:" + signal.getException(), signal.getException()); assertEquals("Signal not set by test thread", 3, signal.getSignal()); assertEquals("Wrong property value(3)", 9, bean.getInt()); } /** Tests whether different threads can set beanutils instances correctly */ public void testBeanUtilsBeanSetInstance() throws Exception { class SetInstanceTesterThread extends Thread { private Signal signal; private BeanUtilsBean bean; SetInstanceTesterThread(Signal signal, BeanUtilsBean bean) { this.signal = signal; this.bean = bean; } public void run() { BeanUtilsBean.setInstance(bean); signal.setSignal(21); signal.setBean(BeanUtilsBean.getInstance()); } public String toString() { return "SetInstanceTesterThread"; } } Signal signal = new Signal(); signal.setSignal(1); BeanUtilsBean beanOne = new BeanUtilsBean(); BeanUtilsBean beanTwo = new BeanUtilsBean(); SetInstanceTesterThread thread = new SetInstanceTesterThread(signal, beanTwo); thread.setContextClassLoader(new TestClassLoader()); BeanUtilsBean.setInstance(beanOne); assertEquals("Start thread gets right instance", beanOne, BeanUtilsBean.getInstance()); thread.start(); thread.join(); assertEquals("Signal not set by test thread", 21, signal.getSignal()); assertEquals("Second thread preserves value", beanOne, BeanUtilsBean.getInstance()); assertEquals("Second thread gets value it set", beanTwo, signal.getBean()); } /** Tests whether the unset method works*/ public void testContextClassLoaderUnset() throws Exception { BeanUtilsBean beanOne = new BeanUtilsBean(); ContextClassLoaderLocal ccll = new ContextClassLoaderLocal(); ccll.set(beanOne); assertEquals("Start thread gets right instance", beanOne, ccll.get()); ccll.unset(); assertTrue("Unset works", !beanOne.equals(ccll.get())); } private boolean isPre14JVM() { // some pre 1.4 JVM have buggy WeakHashMap implementations // this is used to test for those JVM String version = System.getProperty("java.specification.version"); StringTokenizer tokenizer = new StringTokenizer(version,"."); if (tokenizer.nextToken().equals("1")) { String minorVersion = tokenizer.nextToken(); if (minorVersion.equals("0")) return true; if (minorVersion.equals("1")) return true; if (minorVersion.equals("2")) return true; if (minorVersion.equals("3")) return true; } return false; } // ---- Auxillary classes class TestClassLoader extends ClassLoader { public String toString() { return "TestClassLoader"; } } class Signal { private Exception e; private int signal = 0; private BeanUtilsBean bean; private PropertyUtilsBean propertyUtils; private ConvertUtilsBean convertUtils; private Object marker; public Exception getException() { return e; } public void setException(Exception e) { this.e = e; } public int getSignal() { return signal; } public void setSignal(int signal) { this.signal = signal; } public Object getMarkerObject() { return marker; } public void setMarkerObject(Object marker) { this.marker = marker; } public BeanUtilsBean getBean() { return bean; } public void setBean(BeanUtilsBean bean) { this.bean = bean; } public PropertyUtilsBean getPropertyUtils() { return propertyUtils; } public void setPropertyUtils(PropertyUtilsBean propertyUtils) { this.propertyUtils = propertyUtils; } public ConvertUtilsBean getConvertUtils() { return convertUtils; } public void setConvertUtils(ConvertUtilsBean convertUtils) { this.convertUtils = convertUtils; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -