Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定类是否是spring代理?_Java_Spring_Kotlin_Reflection_Spring Aop - Fatal编程技术网

Java 如何确定类是否是spring代理?

Java 如何确定类是否是spring代理?,java,spring,kotlin,reflection,spring-aop,Java,Spring,Kotlin,Reflection,Spring Aop,简而言之 在AopUtils中,我们有 /** * Check whether the given object is a JDK dynamic proxy or a CGLIB proxy. * <p>This method additionally checks if the given object is an instance * of {@link SpringProxy}. * @param object the obje

简而言之

AopUtils
中,我们有

    /**
     * Check whether the given object is a JDK dynamic proxy or a CGLIB proxy.
     * <p>This method additionally checks if the given object is an instance
     * of {@link SpringProxy}.
     * @param object the object to check
     * @see #isJdkDynamicProxy
     * @see #isCglibProxy
     */
    public static boolean isAopProxy(@Nullable Object object) {
        return (object instanceof SpringProxy && (Proxy.isProxyClass(object.getClass()) ||
                object.getClass().getName().contains(ClassUtils.CGLIB_CLASS_SEPARATOR)));
    }
但这不会检测代理,因为即使对于明显代理的类,
SpringProxy::class.java.isAssignableFrom(候选者)
也是
false

我该怎么做

全图

我在
BeanFactoryPostProcessor
中,我需要未代理的bean类通过反射来访问某些带注释的方法

访问发生在lambda函数中,该函数将首先使用
ApplicationContext
检索类的bean。不能在此
BeanFactoryPostProcessor
中强制实例化bean(事实上,如果是这样,则应该抛出异常,因为某些bean是会话范围的)


有趣的问题。为什么
对象是Spring代理?你是说Spring可以代理类实例吗?例如,我想您必须检查它们是否用
@Component
注释。或者连接到Spring内部来检测它将扫描哪些类。你的意思是这样的@卡亚曼让我再试一次。。。我想知道Spring是否会在不创建bean来检查组件的情况下代理组件,而只是使用类对象。您链接到的问题需要一个实例化的bean。
永远不会实例化或分配给任何“有用”的对象。只有来自它的bean(或带有例如
.newInstance()
)的非bean)才会响应这些请求。所以你基本上只能访问元数据。@Kayaman你确定吗?因为我对你的评论想得更多了,我觉得这听起来不对<代码>类::isAssignableFrom检查,引用“如果此类对象表示的类或接口与指定类参数表示的类或接口相同,或者是其超类或超接口”。因此,如果AopUtils检查SpringProxy的对象实例,那么它的类应该满足这个检查,不是吗?请注意,为了证明我的陈述,我刚刚用一些解释性的示例代码更新了答案。
    private fun <T> isAopProxyClass(candidate: Class<T>): Boolean {
        return SpringProxy::class.java.isAssignableFrom(candidate)
            && (
            Proxy.isProxyClass(candidate)
                || candidate.name.contains(CGLIB_CLASS_SEPARATOR)
            )
    }