SPRNET-1433 - Add IsInheritanceAopProxy and IsInheritanceAopProxyType methods
Includes tests.
This commit is contained in:
@@ -47,6 +47,8 @@ namespace Spring.Aop.Framework
|
||||
private const string COMPOSITION_PROXY_TYPE_NAME = "CompositionAopProxy";
|
||||
|
||||
private const string DECORATOR_PROXY_TYPE_NAME = "DecoratorAopProxy";
|
||||
|
||||
private const string INHERITANCE_PROXY_TYPE_NAME = "InheritanceAopProxy";
|
||||
|
||||
/// <summary>
|
||||
/// Is the supplied <paramref name="objectType"/> an AOP proxy?
|
||||
@@ -130,6 +132,30 @@ namespace Spring.Aop.Framework
|
||||
return ((objectType != null) && objectType.FullName.StartsWith(DECORATOR_PROXY_TYPE_NAME));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Is the supplied <paramref name="instance"/> an inheritance based AOP proxy?
|
||||
/// </summary>
|
||||
/// <param name="instance">The instance to be checked.</param>
|
||||
/// <returns>
|
||||
/// <see langword="true"/> if the supplied <paramref name="instance"/> is
|
||||
/// an inheritacne based AOP proxy.
|
||||
/// </returns>
|
||||
public static bool IsInheritanceAopProxy(Object instance)
|
||||
{
|
||||
return instance != null && IsInheritanceAopProxyType(instance.GetType());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Is the supplied <paramref name="objectType"/> an inheritance based AOP proxy type?
|
||||
/// </summary>
|
||||
/// <param name="objectType">The type to be checked.</param>
|
||||
/// <returns><see langword="true"/> if the supplied <paramref name="objectType"/> is an inheritance based AOP proxy type.</returns>
|
||||
public static bool IsInheritanceAopProxyType(Type objectType)
|
||||
{
|
||||
return ((objectType != null) && objectType.FullName.StartsWith(INHERITANCE_PROXY_TYPE_NAME));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all of the interfaces that the <see cref="System.Type"/> of the
|
||||
/// supplied <paramref name="instance"/> implements.
|
||||
@@ -379,5 +405,6 @@ namespace Spring.Aop.Framework
|
||||
}
|
||||
return candidate.GetType();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using NUnit.Framework;
|
||||
using Spring.Aop.Advice;
|
||||
using Spring.Context.Support;
|
||||
using Spring.Objects;
|
||||
using Spring.Objects.Factory.Xml;
|
||||
|
||||
namespace Spring.Aop.Framework.DynamicProxy
|
||||
{
|
||||
[TestFixture]
|
||||
public class IsAopProxyTests
|
||||
{
|
||||
private TestObject _target;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_target = new TestObject("Michael", 23);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TargetIsNotAProxy()
|
||||
{
|
||||
Assert.False(AopUtils.IsAopProxy(_target));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsCompositionProxy()
|
||||
{
|
||||
var pf = new ProxyFactory(typeof(ITestObject), new DebugAdvice());
|
||||
pf.Target = _target;
|
||||
Assert.False(pf.ProxyTargetType);
|
||||
|
||||
var proxy = (ITestObject)pf.GetProxy();
|
||||
|
||||
Assert.True(AopUtils.IsCompositionAopProxy(proxy));
|
||||
Assert.True(AopUtils.IsAopProxy(proxy));
|
||||
Assert.IsNotInstanceOf<TestObject>(proxy);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsDecoratorProxy()
|
||||
{
|
||||
var pf = new ProxyFactory(new DebugAdvice());
|
||||
pf.Target = _target;
|
||||
pf.ProxyTargetType = true;
|
||||
|
||||
var proxy = (TestObject)pf.GetProxy();
|
||||
Assert.True(AopUtils.IsDecoratorAopProxy(proxy));
|
||||
Assert.True(AopUtils.IsAopProxy(proxy));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsInheritanceBasedProxyTypeReturnsFalseForNull()
|
||||
{
|
||||
Assert.False(AopUtils.IsInheritanceAopProxyType(null));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsInheritanceBasedProxyReturnsFalseForNull()
|
||||
{
|
||||
Assert.False(AopUtils.IsInheritanceAopProxy(null));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsInheritanceBasedProxy()
|
||||
{
|
||||
using (var ctx = new XmlApplicationContext(ReadOnlyXmlTestResource.GetFilePath("IsAopProxyTests.xml", this.GetType())))
|
||||
{
|
||||
var proxy = (TestObject)ctx["michael"];
|
||||
Assert.AreEqual("Michael", proxy.Name);
|
||||
Assert.True(AopUtils.IsInheritanceAopProxyType(proxy.GetType()));
|
||||
Assert.True(AopUtils.IsInheritanceAopProxy(proxy));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<objects xmlns="http://www.springframework.net"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:aop="http://www.springframework.net/aop">
|
||||
|
||||
<object type="Spring.Aop.Framework.AutoProxy.InheritanceBasedAopConfigurer, Spring.Aop">
|
||||
<property name="ObjectNames">
|
||||
<list>
|
||||
<value>michael</value>
|
||||
</list>
|
||||
</property>
|
||||
<property name="InterceptorNames">
|
||||
<list>
|
||||
<value>debugInterceptor</value>
|
||||
</list>
|
||||
</property>
|
||||
</object>
|
||||
|
||||
<object id="michael" type="Spring.Objects.TestObject, Spring.Core.Tests">
|
||||
<property name="Age" value="23" />
|
||||
<property name="Name" value="Michael" />
|
||||
</object>
|
||||
|
||||
<object id="debugInterceptor" type="Spring.Aop.Advice.DebugAdvice, Spring.Aop.Tests" />
|
||||
|
||||
</objects>
|
||||
@@ -153,6 +153,7 @@
|
||||
<Compile Include="Aop\Framework\DynamicProxy\InheritanceAopProxyTests.cs" />
|
||||
<Compile Include="Aop\Framework\DynamicProxy\DecoratorAopProxyTests.cs" />
|
||||
<Compile Include="Aop\Framework\DynamicProxy\DefaultAopProxyFactoryTests.cs" />
|
||||
<Compile Include="Aop\Framework\DynamicProxy\IsAopProxyTests.cs" />
|
||||
<Compile Include="Aop\Framework\DynamicProxy\MockTargetSource.cs" />
|
||||
<Compile Include="Aop\Framework\HashtableCachingAdvisorChainFactoryTests.cs">
|
||||
<SubType>Code</SubType>
|
||||
@@ -277,6 +278,7 @@
|
||||
<EmbeddedResource Include="Data\Spring\Aop\Framework\adapter\withBPPContext.xml" />
|
||||
<EmbeddedResource Include="Data\Spring\Aop\Framework\adapter\withoutBPPContext.xml" />
|
||||
<EmbeddedResource Include="Aop\Framework\AutoProxy\advisorAutoProxyCreatorCircularReferencesTests.xml" />
|
||||
<EmbeddedResource Include="Aop\Framework\DynamicProxy\IsAopProxyTests.xml" />
|
||||
<Content Include="Data\Spring\Aop\Framework\AutoProxy\advisorAutoProxyCreator.xml" />
|
||||
<Content Include="Data\Spring\Aop\Framework\AutoProxy\objectNameAutoProxyCreatorTests.xml" />
|
||||
<Content Include="Data\Spring\Aop\Framework\innerBeanTarget.xml" />
|
||||
|
||||
Reference in New Issue
Block a user