diff --git a/src/main/java/cn/noexception/container/aop/TargetSource.java b/src/main/java/cn/noexception/container/aop/TargetSource.java index 8866a1e7b5a6bd741321924d0a482d5906e5c52c..5c4738ced0c125591ebef751edb11784e4b72574 100644 --- a/src/main/java/cn/noexception/container/aop/TargetSource.java +++ b/src/main/java/cn/noexception/container/aop/TargetSource.java @@ -1,5 +1,7 @@ package cn.noexception.container.aop; +import cn.noexception.container.factory.utils.ClassUtils; + /** * TargetSource * @@ -10,15 +12,18 @@ public class TargetSource { private final Object target; - public TargetSource(Object target){ + public TargetSource(Object target) { this.target = target; } - public Class[] getTargetClass(){ - return this.target.getClass().getInterfaces(); + public Class[] getTargetClass() { + Class clazz = this.target.getClass(); + // 如果是 cglib 代理的话,得获取 superClass 才可以 + clazz = ClassUtils.isCglibProxyClass(clazz) ? clazz.getSuperclass() : clazz; + return clazz.getInterfaces(); } - public Object getTarget(){ + public Object getTarget() { return this.target; } diff --git a/src/main/java/cn/noexception/container/aop/framework/Cglib2AopProxy.java b/src/main/java/cn/noexception/container/aop/framework/Cglib2AopProxy.java index 1dd06ac5b70bcb3d00f5a83bb8f5f16092895c35..4f8df9e815f6333b62a77959a825cb6120fedf6f 100644 --- a/src/main/java/cn/noexception/container/aop/framework/Cglib2AopProxy.java +++ b/src/main/java/cn/noexception/container/aop/framework/Cglib2AopProxy.java @@ -35,7 +35,7 @@ public class Cglib2AopProxy implements AopProxy { private final AdvisedSupport advised; - private DynamicAdvisedInterceptor(AdvisedSupport advised) { + public DynamicAdvisedInterceptor(AdvisedSupport advised) { this.advised = advised; } diff --git a/src/main/java/cn/noexception/container/factory/config/BeanDefinition.java b/src/main/java/cn/noexception/container/factory/config/BeanDefinition.java index d73ddb38340c6213222af70f0e18dcec673fbfc7..f7f7102de1fd7596ff3eb01cafe927bae455bb21 100644 --- a/src/main/java/cn/noexception/container/factory/config/BeanDefinition.java +++ b/src/main/java/cn/noexception/container/factory/config/BeanDefinition.java @@ -22,8 +22,7 @@ public class BeanDefinition { private boolean prototype = false; public BeanDefinition(Class beanClass) { - this.beanClass = beanClass; - this.propertyValues = new PropertyValues(); + this(beanClass, null); } public BeanDefinition(Class beanClass, PropertyValues propertyValues) { @@ -31,6 +30,21 @@ public class BeanDefinition { this.propertyValues = propertyValues != null ? propertyValues : new PropertyValues(); } + public void setScope(String scope) { + this.scope = scope; + this.singleton = SCOPE_SINGLETON.equals(scope); + this.prototype = SCOPE_PROTOTYPE.equals(scope); + } + + public boolean isSingleton() { + return singleton; + } + + + public boolean isPrototype() { + return prototype; + } + public Class getBeanClass() { return beanClass; } @@ -63,29 +77,4 @@ public class BeanDefinition { this.destroyMethodName = destroyMethodName; } - public String getScope() { - return scope; - } - - public void setScope(String scope) { - this.scope = scope; - this.singleton = SCOPE_SINGLETON.equals(scope); - this.prototype = SCOPE_PROTOTYPE.equals(scope); - } - - public boolean isSingleton() { - return singleton; - } - - public void setSingleton(boolean singleton) { - this.singleton = singleton; - } - - public boolean isPrototype() { - return prototype; - } - - public void setPrototype(boolean prototype) { - this.prototype = prototype; - } } diff --git a/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java b/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java index 0f02df962bb722c8c2ba51eaa4f8d85d6a54a5c9..cbd3705a05c100cae7cb20091b3312f2c9063589 100644 --- a/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java +++ b/src/main/java/cn/noexception/container/factory/support/AbstractAutowiredCapableBeanFactory.java @@ -19,7 +19,9 @@ import java.lang.reflect.Method; */ public abstract class AbstractAutowiredCapableBeanFactory extends AbstractBeanFactory implements AutowireCapableBeanFactory { - private InstantiationStrategy instantiationStrategy = new CglibSubclassingInstantiationStrategy(); // 暂时默认选择 cglib 来实例化 + // 实例化策略 +// private InstantiationStrategy instantiationStrategy = new CglibSubclassingInstantiationStrategy(); // 选择使用 cglib代理来实例化 + private InstantiationStrategy instantiationStrategy = new SimpleInstantiationStrategy(); // 选择使用 JDK代理 来实例化 protected Object doCreateBean(String beanName, BeanDefinition beanDefinition, Object[] args) { Object bean = null;