/*
* 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.target;
import junit.framework.TestCase;
import org.springframework.aop.TargetSource;
import org.springframework.aop.framework.ProxyFactory;
/**
* @author Rob Harrop
* @author Juergen Hoeller
*/
public class LazyCreationTargetSourceTests extends TestCase {
public void testCreateLazy() {
TargetSource targetSource = new AbstractLazyCreationTargetSource() {
protected Object createObject() {
return new InitCountingBean();
}
public Class getTargetClass() {
return InitCountingBean.class;
}
};
InitCountingBean proxy = (InitCountingBean) ProxyFactory.getProxy(targetSource);
assertEquals("Init count should be 0", 0, InitCountingBean.initCount);
assertEquals("Target class incorrect", InitCountingBean.class, targetSource.getTargetClass());
assertEquals("Init count should still be 0 after getTargetClass()", 0, InitCountingBean.initCount);
proxy.doSomething();
assertEquals("Init count should now be 1", 1, InitCountingBean.initCount);
proxy.doSomething();
assertEquals("Init count should still be 1", 1, InitCountingBean.initCount);
}
private static class InitCountingBean {
public static int initCount;
public InitCountingBean() {
if (InitCountingBean.class.equals(getClass())) {
// only increment when creating the actual target - not the proxy
initCount++;
}
}
public void doSomething() {
//no-op
}
}
}