Browse Source
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@365 50f2f4bb-b051-0410-bef5-90022cba6387pull/1/head
21 changed files with 1260 additions and 10 deletions
@ -0,0 +1,109 @@
@@ -0,0 +1,109 @@
|
||||
/* |
||||
* Copyright 2002-2006 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
import java.lang.reflect.Method; |
||||
|
||||
import org.aspectj.lang.JoinPoint; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
import org.aspectj.lang.annotation.Before; |
||||
import org.aspectj.lang.reflect.MethodSignature; |
||||
|
||||
import org.springframework.util.ObjectUtils; |
||||
|
||||
/** |
||||
* Add a DeclareParents field in concrete subclasses, to identify |
||||
* the type pattern to apply the introduction to. |
||||
* |
||||
* @author Rod Johnson |
||||
* @since 2.0 |
||||
*/ |
||||
@Aspect |
||||
public abstract class AbstractMakeModifiable { |
||||
|
||||
public interface MutableModifable extends Modifiable { |
||||
void markDirty(); |
||||
} |
||||
|
||||
public static class ModifiableImpl implements MutableModifable { |
||||
private boolean modified; |
||||
|
||||
public void acceptChanges() { |
||||
modified = false; |
||||
} |
||||
|
||||
public boolean isModified() { |
||||
return modified; |
||||
} |
||||
|
||||
public void markDirty() { |
||||
this.modified = true; |
||||
} |
||||
} |
||||
|
||||
@Before(value="execution(void set*(*)) && this(modifiable) && args(newValue)", |
||||
argNames="modifiable,newValue") |
||||
public void recordModificationIfSetterArgumentDiffersFromOldValue(JoinPoint jp, |
||||
MutableModifable mixin, Object newValue) { |
||||
|
||||
/* |
||||
* We use the mixin to check and, if necessary, change, |
||||
* modification status. We need the JoinPoint to get the |
||||
* setter method. We use newValue for comparison. |
||||
* We try to invoke the getter if possible. |
||||
*/ |
||||
|
||||
if (mixin.isModified()) { |
||||
// Already changed, don't need to change again
|
||||
//System.out.println("changed");
|
||||
return; |
||||
} |
||||
|
||||
// Find the current raw value, by invoking the corresponding setter
|
||||
Method correspondingGetter = getGetterFromSetter(((MethodSignature) jp.getSignature()).getMethod()); |
||||
boolean modified = true; |
||||
if (correspondingGetter != null) { |
||||
try { |
||||
Object oldValue = correspondingGetter.invoke(jp.getTarget()); |
||||
//System.out.println("Old value=" + oldValue + "; new=" + newValue);
|
||||
modified = !ObjectUtils.nullSafeEquals(oldValue, newValue); |
||||
} |
||||
catch (Exception ex) { |
||||
ex.printStackTrace(); |
||||
// Don't sweat on exceptions; assume value was modified
|
||||
} |
||||
} |
||||
else { |
||||
//System.out.println("cannot get getter for " + jp);
|
||||
} |
||||
if (modified) { |
||||
mixin.markDirty(); |
||||
} |
||||
} |
||||
|
||||
private Method getGetterFromSetter(Method setter) { |
||||
String getterName = setter.getName().replaceFirst("set", "get"); |
||||
try { |
||||
return setter.getDeclaringClass().getMethod(getterName, (Class[]) null); |
||||
} |
||||
catch (NoSuchMethodException ex) { |
||||
// must be write only
|
||||
return null; |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/* |
||||
* Copyright 2002-2005 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
import org.springframework.aop.framework.Lockable; |
||||
|
||||
/** |
||||
* @author Rod Johnson |
||||
*/ |
||||
public class CannotBeUnlocked implements Lockable, Comparable<Object> { |
||||
|
||||
public void lock() { |
||||
} |
||||
|
||||
public void unlock() { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
public boolean locked() { |
||||
return true; |
||||
} |
||||
|
||||
public int compareTo(Object arg0) { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
/* |
||||
* Copyright 2002-2006 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
* @since 2.o |
||||
*/ |
||||
@Aspect |
||||
public class FooAspect { |
||||
|
||||
} |
||||
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
/* |
||||
* Copyright 2002-2006 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
import org.aspectj.lang.annotation.Aspect; |
||||
import org.aspectj.lang.annotation.DeclareParents; |
||||
|
||||
/** |
||||
* Adds a declare parents pointcut. |
||||
* @author Rod Johnson |
||||
* @since 2.0 |
||||
*/ |
||||
@Aspect |
||||
public class MakeITestBeanModifiable extends AbstractMakeModifiable { |
||||
|
||||
@DeclareParents(value = "org.springframework.beans.ITestBean+", |
||||
defaultImpl=ModifiableImpl.class) |
||||
public static MutableModifable mixin; |
||||
|
||||
} |
||||
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
/* |
||||
* Copyright 2002-2006 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
import org.aspectj.lang.annotation.Aspect; |
||||
import org.aspectj.lang.annotation.Before; |
||||
import org.aspectj.lang.annotation.DeclareParents; |
||||
import org.springframework.aop.framework.DefaultLockable; |
||||
import org.springframework.aop.framework.Lockable; |
||||
|
||||
/** |
||||
* Demonstrates introductions, AspectJ annotation style. |
||||
* <p> |
||||
* @author Rod Johnson |
||||
* @since 2.0 |
||||
*/ |
||||
@Aspect |
||||
public class MakeLockable { |
||||
|
||||
@DeclareParents(value = "org.springframework..*", |
||||
defaultImpl=DefaultLockable.class) |
||||
public static Lockable mixin; |
||||
|
||||
@Before(value="execution(void set*(*)) && this(mixin)", argNames="mixin") |
||||
public void checkNotLocked( |
||||
Lockable mixin) // Bind to arg
|
||||
{ |
||||
// Can also obtain the mixin (this) this way
|
||||
//Lockable mixin = (Lockable) jp.getThis();
|
||||
if (mixin.locked()) { |
||||
throw new IllegalStateException(); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
/* |
||||
* |
||||
* public aspect MakeLockable { |
||||
* |
||||
* declare parents org....* implements Lockable; |
||||
* |
||||
* private boolean Lockable.locked; |
||||
|
||||
* public void Lockable.lock() { |
||||
this.locked = true; |
||||
} |
||||
|
||||
* public void Lockable.unlock() { |
||||
this.locked = false; |
||||
} |
||||
|
||||
* public boolean Lockable.locked() { |
||||
return this.locked; |
||||
} |
||||
* |
||||
* |
||||
* } |
||||
*/ |
||||
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
/* |
||||
* Copyright 2002-2006 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
/** |
||||
* Used as a mixin. |
||||
* |
||||
* @author Rod Johnson |
||||
*/ |
||||
public interface Modifiable { |
||||
|
||||
boolean isModified(); |
||||
|
||||
void acceptChanges(); |
||||
|
||||
} |
||||
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
/* |
||||
* Copyright 2002-2007 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
import org.aspectj.lang.annotation.Pointcut; |
||||
|
||||
/** |
||||
* @author Adrian Colyer |
||||
*/ |
||||
@Aspect |
||||
public class NamedPointcutWithArgs { |
||||
|
||||
@Pointcut("execution(* *(..)) && args(s,..)") |
||||
public void pointcutWithArgs(String s) {} |
||||
|
||||
@Around("pointcutWithArgs(aString)") |
||||
public Object doAround(ProceedingJoinPoint pjp, String aString) throws Throwable { |
||||
System.out.println("got '" + aString + "' at '" + pjp + "'"); |
||||
throw new IllegalArgumentException(aString); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
package org.springframework.aop.aspectj.annotation; |
||||
|
||||
public class NotLockable { |
||||
|
||||
private int intValue; |
||||
|
||||
public int getIntValue() { |
||||
return intValue; |
||||
} |
||||
|
||||
public void setIntValue(int intValue) { |
||||
this.intValue = intValue; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
/* |
||||
* Copyright 2002-2005 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.framework; |
||||
|
||||
/** |
||||
* Simple implementation of Lockable interface for use in mixins. |
||||
* |
||||
* @author Rod Johnson |
||||
*/ |
||||
public class DefaultLockable implements Lockable { |
||||
|
||||
private boolean locked; |
||||
|
||||
public void lock() { |
||||
this.locked = true; |
||||
} |
||||
|
||||
public void unlock() { |
||||
this.locked = false; |
||||
} |
||||
|
||||
public boolean locked() { |
||||
return this.locked; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
/* |
||||
* Copyright 2002-2005 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.aop.framework; |
||||
|
||||
|
||||
/** |
||||
* Simple interface to use for mixins |
||||
* |
||||
* @author Rod Johnson |
||||
* |
||||
*/ |
||||
public interface Lockable { |
||||
|
||||
void lock(); |
||||
|
||||
void unlock(); |
||||
|
||||
boolean locked(); |
||||
} |
||||
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
/* |
||||
* Copyright 2002-2007 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans; |
||||
|
||||
import org.springframework.core.enums.ShortCodedLabeledEnum; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
*/ |
||||
@SuppressWarnings("serial") |
||||
public class Colour extends ShortCodedLabeledEnum { |
||||
|
||||
public static final Colour RED = new Colour(0, "RED"); |
||||
public static final Colour BLUE = new Colour(1, "BLUE"); |
||||
public static final Colour GREEN = new Colour(2, "GREEN"); |
||||
public static final Colour PURPLE = new Colour(3, "PURPLE"); |
||||
|
||||
private Colour(int code, String label) { |
||||
super(code, label); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
/* |
||||
* Copyright 2002-2005 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans; |
||||
|
||||
public interface INestedTestBean { |
||||
|
||||
public String getCompany(); |
||||
|
||||
} |
||||
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
|
||||
/* |
||||
* Copyright 2002-2005 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans; |
||||
|
||||
public interface IOther { |
||||
|
||||
void absquatulate(); |
||||
|
||||
} |
||||
@ -0,0 +1,71 @@
@@ -0,0 +1,71 @@
|
||||
/* |
||||
* Copyright 2002-2007 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
/** |
||||
* Interface used for {@link org.springframework.beans.TestBean}. |
||||
* |
||||
* <p>Two methods are the same as on Person, but if this |
||||
* extends person it breaks quite a few tests.. |
||||
* |
||||
* @author Rod Johnson |
||||
* @author Juergen Hoeller |
||||
*/ |
||||
public interface ITestBean { |
||||
|
||||
int getAge(); |
||||
|
||||
void setAge(int age); |
||||
|
||||
String getName(); |
||||
|
||||
void setName(String name); |
||||
|
||||
ITestBean getSpouse(); |
||||
|
||||
void setSpouse(ITestBean spouse); |
||||
|
||||
ITestBean[] getSpouses(); |
||||
|
||||
String[] getStringArray(); |
||||
|
||||
void setStringArray(String[] stringArray); |
||||
|
||||
/** |
||||
* Throws a given (non-null) exception. |
||||
*/ |
||||
void exceptional(Throwable t) throws Throwable; |
||||
|
||||
Object returnsThis(); |
||||
|
||||
INestedTestBean getDoctor(); |
||||
|
||||
INestedTestBean getLawyer(); |
||||
|
||||
IndexedTestBean getNestedIndexedBean(); |
||||
|
||||
/** |
||||
* Increment the age by one. |
||||
* @return the previous age |
||||
*/ |
||||
int haveBirthday(); |
||||
|
||||
void unreliableFileOperation() throws IOException; |
||||
|
||||
} |
||||
@ -0,0 +1,145 @@
@@ -0,0 +1,145 @@
|
||||
/* |
||||
* Copyright 2002-2006 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.Collection; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.Set; |
||||
import java.util.SortedMap; |
||||
import java.util.SortedSet; |
||||
import java.util.TreeSet; |
||||
|
||||
/** |
||||
* @author Juergen Hoeller |
||||
* @since 11.11.2003 |
||||
*/ |
||||
public class IndexedTestBean { |
||||
|
||||
private TestBean[] array; |
||||
|
||||
private Collection<TestBean> collection; |
||||
|
||||
private List<TestBean> list; |
||||
|
||||
private Set<TestBean> set; |
||||
|
||||
private SortedSet<TestBean> sortedSet; |
||||
|
||||
private Map<String, ? super Object> map; |
||||
|
||||
private SortedMap<?, ?> sortedMap; |
||||
|
||||
|
||||
public IndexedTestBean() { |
||||
this(true); |
||||
} |
||||
|
||||
public IndexedTestBean(boolean populate) { |
||||
if (populate) { |
||||
populate(); |
||||
} |
||||
} |
||||
|
||||
public void populate() { |
||||
TestBean tb0 = new TestBean("name0", 0); |
||||
TestBean tb1 = new TestBean("name1", 0); |
||||
TestBean tb2 = new TestBean("name2", 0); |
||||
TestBean tb3 = new TestBean("name3", 0); |
||||
TestBean tb4 = new TestBean("name4", 0); |
||||
TestBean tb5 = new TestBean("name5", 0); |
||||
TestBean tb6 = new TestBean("name6", 0); |
||||
TestBean tb7 = new TestBean("name7", 0); |
||||
TestBean tbX = new TestBean("nameX", 0); |
||||
TestBean tbY = new TestBean("nameY", 0); |
||||
this.array = new TestBean[] {tb0, tb1}; |
||||
this.list = new ArrayList<TestBean>(); |
||||
this.list.add(tb2); |
||||
this.list.add(tb3); |
||||
this.set = new TreeSet<TestBean>(); |
||||
this.set.add(tb6); |
||||
this.set.add(tb7); |
||||
this.map = new HashMap<String, Object>(); |
||||
this.map.put("key1", tb4); |
||||
this.map.put("key2", tb5); |
||||
this.map.put("key.3", tb5); |
||||
List<TestBean> list = new ArrayList<TestBean>(); |
||||
list.add(tbX); |
||||
list.add(tbY); |
||||
this.map.put("key4", list); |
||||
} |
||||
|
||||
|
||||
public TestBean[] getArray() { |
||||
return array; |
||||
} |
||||
|
||||
public void setArray(TestBean[] array) { |
||||
this.array = array; |
||||
} |
||||
|
||||
public Collection<TestBean> getCollection() { |
||||
return collection; |
||||
} |
||||
|
||||
public void setCollection(Collection<TestBean> collection) { |
||||
this.collection = collection; |
||||
} |
||||
|
||||
public List<TestBean> getList() { |
||||
return list; |
||||
} |
||||
|
||||
public void setList(List<TestBean> list) { |
||||
this.list = list; |
||||
} |
||||
|
||||
public Set<TestBean> getSet() { |
||||
return set; |
||||
} |
||||
|
||||
public void setSet(Set<TestBean> set) { |
||||
this.set = set; |
||||
} |
||||
|
||||
public SortedSet<TestBean> getSortedSet() { |
||||
return sortedSet; |
||||
} |
||||
|
||||
public void setSortedSet(SortedSet<TestBean> sortedSet) { |
||||
this.sortedSet = sortedSet; |
||||
} |
||||
|
||||
public Map<String, ? super Object> getMap() { |
||||
return map; |
||||
} |
||||
|
||||
public void setMap(Map<String, ? super Object> map) { |
||||
this.map = map; |
||||
} |
||||
|
||||
public SortedMap<?, ?> getSortedMap() { |
||||
return sortedMap; |
||||
} |
||||
|
||||
public void setSortedMap(SortedMap<?, ?> sortedMap) { |
||||
this.sortedMap = sortedMap; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,60 @@
@@ -0,0 +1,60 @@
|
||||
/* |
||||
* Copyright 2002-2005 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans; |
||||
|
||||
/** |
||||
* Simple nested test bean used for testing bean factories, AOP framework etc. |
||||
* |
||||
* @author Trevor D. Cook |
||||
* @since 30.09.2003 |
||||
*/ |
||||
public class NestedTestBean implements INestedTestBean { |
||||
|
||||
private String company = ""; |
||||
|
||||
public NestedTestBean() { |
||||
} |
||||
|
||||
public NestedTestBean(String company) { |
||||
setCompany(company); |
||||
} |
||||
|
||||
public void setCompany(String company) { |
||||
this.company = (company != null ? company : ""); |
||||
} |
||||
|
||||
public String getCompany() { |
||||
return company; |
||||
} |
||||
|
||||
public boolean equals(Object obj) { |
||||
if (!(obj instanceof NestedTestBean)) { |
||||
return false; |
||||
} |
||||
NestedTestBean ntb = (NestedTestBean) obj; |
||||
return this.company.equals(ntb.company); |
||||
} |
||||
|
||||
public int hashCode() { |
||||
return this.company.hashCode(); |
||||
} |
||||
|
||||
public String toString() { |
||||
return "NestedTestBean: " + this.company; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,424 @@
@@ -0,0 +1,424 @@
|
||||
/* |
||||
* Copyright 2002-2008 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.beans; |
||||
|
||||
import java.io.IOException; |
||||
import java.util.ArrayList; |
||||
import java.util.Collection; |
||||
import java.util.Date; |
||||
import java.util.HashMap; |
||||
import java.util.HashSet; |
||||
import java.util.LinkedList; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.Properties; |
||||
import java.util.Set; |
||||
|
||||
import org.springframework.util.ObjectUtils; |
||||
|
||||
/** |
||||
* Simple test bean used for testing bean factories, the AOP framework etc. |
||||
* |
||||
* @author Rod Johnson |
||||
* @author Juergen Hoeller |
||||
* @since 15 April 2001 |
||||
*/ |
||||
public class TestBean implements ITestBean, IOther, Comparable<Object> { |
||||
|
||||
private String beanName; |
||||
|
||||
private String country; |
||||
|
||||
private boolean postProcessed; |
||||
|
||||
private String name; |
||||
|
||||
private String sex; |
||||
|
||||
private int age; |
||||
|
||||
private boolean jedi; |
||||
|
||||
private ITestBean[] spouses; |
||||
|
||||
private String touchy; |
||||
|
||||
private String[] stringArray; |
||||
|
||||
private Integer[] someIntegerArray; |
||||
|
||||
private Date date = new Date(); |
||||
|
||||
private Float myFloat = new Float(0.0); |
||||
|
||||
private Collection<?> friends = new LinkedList<Object>(); |
||||
|
||||
private Set<?> someSet = new HashSet<Object>(); |
||||
|
||||
private Map<?, ?> someMap = new HashMap<Object, Object>(); |
||||
|
||||
private List<?> someList = new ArrayList<Object>(); |
||||
|
||||
private Properties someProperties = new Properties(); |
||||
|
||||
private INestedTestBean doctor = new NestedTestBean(); |
||||
|
||||
private INestedTestBean lawyer = new NestedTestBean(); |
||||
|
||||
private IndexedTestBean nestedIndexedBean; |
||||
|
||||
private boolean destroyed; |
||||
|
||||
private Number someNumber; |
||||
|
||||
private Colour favouriteColour; |
||||
|
||||
private Boolean someBoolean; |
||||
|
||||
private List<?> otherColours; |
||||
|
||||
private List<?> pets; |
||||
|
||||
|
||||
public TestBean() { |
||||
} |
||||
|
||||
public TestBean(String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
public TestBean(ITestBean spouse) { |
||||
this.spouses = new ITestBean[] {spouse}; |
||||
} |
||||
|
||||
public TestBean(String name, int age) { |
||||
this.name = name; |
||||
this.age = age; |
||||
} |
||||
|
||||
public TestBean(ITestBean spouse, Properties someProperties) { |
||||
this.spouses = new ITestBean[] {spouse}; |
||||
this.someProperties = someProperties; |
||||
} |
||||
|
||||
public TestBean(List<?> someList) { |
||||
this.someList = someList; |
||||
} |
||||
|
||||
public TestBean(Set<?> someSet) { |
||||
this.someSet = someSet; |
||||
} |
||||
|
||||
public TestBean(Map<?, ?> someMap) { |
||||
this.someMap = someMap; |
||||
} |
||||
|
||||
public TestBean(Properties someProperties) { |
||||
this.someProperties = someProperties; |
||||
} |
||||
|
||||
|
||||
public void setBeanName(String beanName) { |
||||
this.beanName = beanName; |
||||
} |
||||
|
||||
public String getBeanName() { |
||||
return beanName; |
||||
} |
||||
|
||||
public void setPostProcessed(boolean postProcessed) { |
||||
this.postProcessed = postProcessed; |
||||
} |
||||
|
||||
public boolean isPostProcessed() { |
||||
return postProcessed; |
||||
} |
||||
|
||||
public String getName() { |
||||
return name; |
||||
} |
||||
|
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
public String getSex() { |
||||
return sex; |
||||
} |
||||
|
||||
public void setSex(String sex) { |
||||
this.sex = sex; |
||||
if (this.name == null) { |
||||
this.name = sex; |
||||
} |
||||
} |
||||
|
||||
public int getAge() { |
||||
return age; |
||||
} |
||||
|
||||
public void setAge(int age) { |
||||
this.age = age; |
||||
} |
||||
|
||||
public boolean isJedi() { |
||||
return jedi; |
||||
} |
||||
|
||||
public void setJedi(boolean jedi) { |
||||
this.jedi = jedi; |
||||
} |
||||
|
||||
public ITestBean getSpouse() { |
||||
return (spouses != null ? spouses[0] : null); |
||||
} |
||||
|
||||
public void setSpouse(ITestBean spouse) { |
||||
this.spouses = new ITestBean[] {spouse}; |
||||
} |
||||
|
||||
public ITestBean[] getSpouses() { |
||||
return spouses; |
||||
} |
||||
|
||||
public String getTouchy() { |
||||
return touchy; |
||||
} |
||||
|
||||
public void setTouchy(String touchy) throws Exception { |
||||
if (touchy.indexOf('.') != -1) { |
||||
throw new Exception("Can't contain a ."); |
||||
} |
||||
if (touchy.indexOf(',') != -1) { |
||||
throw new NumberFormatException("Number format exception: contains a ,"); |
||||
} |
||||
this.touchy = touchy; |
||||
} |
||||
|
||||
public String getCountry() { |
||||
return country; |
||||
} |
||||
|
||||
public void setCountry(String country) { |
||||
this.country = country; |
||||
} |
||||
|
||||
public String[] getStringArray() { |
||||
return stringArray; |
||||
} |
||||
|
||||
public void setStringArray(String[] stringArray) { |
||||
this.stringArray = stringArray; |
||||
} |
||||
|
||||
public Integer[] getSomeIntegerArray() { |
||||
return someIntegerArray; |
||||
} |
||||
|
||||
public void setSomeIntegerArray(Integer[] someIntegerArray) { |
||||
this.someIntegerArray = someIntegerArray; |
||||
} |
||||
|
||||
public Date getDate() { |
||||
return date; |
||||
} |
||||
|
||||
public void setDate(Date date) { |
||||
this.date = date; |
||||
} |
||||
|
||||
public Float getMyFloat() { |
||||
return myFloat; |
||||
} |
||||
|
||||
public void setMyFloat(Float myFloat) { |
||||
this.myFloat = myFloat; |
||||
} |
||||
|
||||
public Collection<?> getFriends() { |
||||
return friends; |
||||
} |
||||
|
||||
public void setFriends(Collection<?> friends) { |
||||
this.friends = friends; |
||||
} |
||||
|
||||
public Set<?> getSomeSet() { |
||||
return someSet; |
||||
} |
||||
|
||||
public void setSomeSet(Set<?> someSet) { |
||||
this.someSet = someSet; |
||||
} |
||||
|
||||
public Map<?, ?> getSomeMap() { |
||||
return someMap; |
||||
} |
||||
|
||||
public void setSomeMap(Map<?, ?> someMap) { |
||||
this.someMap = someMap; |
||||
} |
||||
|
||||
public List<?> getSomeList() { |
||||
return someList; |
||||
} |
||||
|
||||
public void setSomeList(List<?> someList) { |
||||
this.someList = someList; |
||||
} |
||||
|
||||
public Properties getSomeProperties() { |
||||
return someProperties; |
||||
} |
||||
|
||||
public void setSomeProperties(Properties someProperties) { |
||||
this.someProperties = someProperties; |
||||
} |
||||
|
||||
public INestedTestBean getDoctor() { |
||||
return doctor; |
||||
} |
||||
|
||||
public void setDoctor(INestedTestBean doctor) { |
||||
this.doctor = doctor; |
||||
} |
||||
|
||||
public INestedTestBean getLawyer() { |
||||
return lawyer; |
||||
} |
||||
|
||||
public void setLawyer(INestedTestBean lawyer) { |
||||
this.lawyer = lawyer; |
||||
} |
||||
|
||||
public Number getSomeNumber() { |
||||
return someNumber; |
||||
} |
||||
|
||||
public void setSomeNumber(Number someNumber) { |
||||
this.someNumber = someNumber; |
||||
} |
||||
|
||||
public Colour getFavouriteColour() { |
||||
return favouriteColour; |
||||
} |
||||
|
||||
public void setFavouriteColour(Colour favouriteColour) { |
||||
this.favouriteColour = favouriteColour; |
||||
} |
||||
|
||||
public Boolean getSomeBoolean() { |
||||
return someBoolean; |
||||
} |
||||
|
||||
public void setSomeBoolean(Boolean someBoolean) { |
||||
this.someBoolean = someBoolean; |
||||
} |
||||
|
||||
public IndexedTestBean getNestedIndexedBean() { |
||||
return nestedIndexedBean; |
||||
} |
||||
|
||||
public void setNestedIndexedBean(IndexedTestBean nestedIndexedBean) { |
||||
this.nestedIndexedBean = nestedIndexedBean; |
||||
} |
||||
|
||||
public List<?> getOtherColours() { |
||||
return otherColours; |
||||
} |
||||
|
||||
public void setOtherColours(List<?> otherColours) { |
||||
this.otherColours = otherColours; |
||||
} |
||||
|
||||
public List<?> getPets() { |
||||
return pets; |
||||
} |
||||
|
||||
public void setPets(List<?> pets) { |
||||
this.pets = pets; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* @see ITestBean#exceptional(Throwable) |
||||
*/ |
||||
public void exceptional(Throwable t) throws Throwable { |
||||
if (t != null) { |
||||
throw t; |
||||
} |
||||
} |
||||
|
||||
public void unreliableFileOperation() throws IOException { |
||||
throw new IOException(); |
||||
} |
||||
/** |
||||
* @see ITestBean#returnsThis() |
||||
*/ |
||||
public Object returnsThis() { |
||||
return this; |
||||
} |
||||
|
||||
/** |
||||
* @see IOther#absquatulate() |
||||
*/ |
||||
public void absquatulate() { |
||||
} |
||||
|
||||
public int haveBirthday() { |
||||
return age++; |
||||
} |
||||
|
||||
|
||||
public void destroy() { |
||||
this.destroyed = true; |
||||
} |
||||
|
||||
public boolean wasDestroyed() { |
||||
return destroyed; |
||||
} |
||||
|
||||
|
||||
public boolean equals(Object other) { |
||||
if (this == other) { |
||||
return true; |
||||
} |
||||
if (other == null || !(other instanceof TestBean)) { |
||||
return false; |
||||
} |
||||
TestBean tb2 = (TestBean) other; |
||||
return (ObjectUtils.nullSafeEquals(this.name, tb2.name) && this.age == tb2.age); |
||||
} |
||||
|
||||
public int hashCode() { |
||||
return this.age; |
||||
} |
||||
|
||||
public int compareTo(Object other) { |
||||
if (this.name != null && other instanceof TestBean) { |
||||
return this.name.compareTo(((TestBean) other).getName()); |
||||
} |
||||
else { |
||||
return 1; |
||||
} |
||||
} |
||||
|
||||
public String toString() { |
||||
return this.name; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue