尝试导航到spring社交网络模块的/ connect端点时出现以下错误。
我得到的是什么:
[Request processing failed; nested exception is
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'scopedTarget.connectionRepository'
defined in ServletContext resource [/WEB-INF/appContext.xml]:
Initialization of bean failed; nested exception is
org.springframework.aop.framework.AopConfigException:
Could not generate CGLIB subclass of class
[class org.springframework.social.connect.jdbc.JdbcConnectionRepository]:
Common causes of this problem include using a final class or a non-visible class;
nested exception is java.lang.IllegalArgumentException:
Superclass has no null constructors but no arguments were given]
web.xml的相关部分:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/appContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
appContext.xml的相关部分:
<bean id="connectionFactoryLocator"
class="org.springframework.social.connect.support.ConnectionFactoryRegistry">
<property name="connectionFactories">
<list>
<bean class="org.springframework.social.facebook.connect.FacebookConnectionFactory">
<constructor-arg value="${facebook.clientId}" />
<constructor-arg value="${facebook.clientSecret}" />
</bean>
</list>
</property>
</bean>
<bean id="usersConnectionRepository"
class="org.springframework.social.connect.jdbc.JdbcUsersConnectionRepository">
<constructor-arg ref="dataSource" />
<constructor-arg ref="connectionFactoryLocator" />
<constructor-arg ref="textEncryptor" />
</bean>
<bean id="connectionRepository" factory-method="createConnectionRepository"
factory-bean="usersConnectionRepository" scope="request">
<constructor-arg value="#{request.userPrincipal.name}" />
<aop:scoped-proxy proxy-target-class="false" />
</bean>
感谢您的回复。
答案 0 :(得分:5)
我发现此链接很有用https://github.com/socialsignin/socialsignin-showcase/issues/6,它解决了我的问题。
基本上在这种情况下,问题在于AOP代理,由于某种原因,CGLIB代理在这种情况下不起作用。所以你必须将其关闭并切换到JDK代理。所以我所做的只是在我的context.xml中进行此更改 -
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true"/>
到
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="false"/>
通过使 proxy-target-class =&#34; false&#34; spring将使用JDK代理(不要问为什么我不知道)。
它解决了我的问题。
但如果它对你不起作用,那么也要改变它:
<security:global-method-security proxy-target-class="false" >
和此:
<bean id="connectionFactoryLocator" class="org.springframework.social.connect.support.ConnectionFactoryRegistry">
<property name="connectionFactories">
<list>
<bean class="org.springframework.social.facebook.connect.FacebookConnectionFactory">
<constructor-arg value="xxxxxxxxxxx" />
<constructor-arg value="xxxxxxxxxxxxxxxxxxxxxxxxxxx" />
</bean>
</list>
</property>
<aop:scoped-proxy proxy-target-class="false"/>
</bean>
希望这有帮助。快乐的编码:)
答案 1 :(得分:3)
我有类似的问题,但是我没有使用任何xml配置,所有内容都是由spring-boot自动配置的。
以下是我尝试做/ connect / facebook的事情:
出现意外错误(type = Internal Server Error, 状态= 500)。使用名称创建bean时出错 &#39; scopedTarget.connectionRepository&#39;在类路径资源中定义 [组织/ springframework的/社会/配置/注解/ SocialConfiguration.class]: bean的初始化失败;嵌套异常是 org.springframework.aop.framework.AopConfigException:不能 生成类[class]的CGLIB子类 org.springframework.social.connect.jdbc.JdbcConnectionRepository]: 这个问题的常见原因包括使用最终类或 不可见的阶级;嵌套异常是 org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException - &GT;空
根本原因是在类路径中有 spring-boot-devtools 。删除devtools解决了这个问题。我也找到了一个男人开的PR,请在那里发表评论以引起更多关注。 pull request
UPD。 PR已合并,从2.0.0.M1开始,dev-tools不再存在问题。
答案 2 :(得分:0)
有两种方法可以解决springboot项目中的这个问题:
spring.aop.proxy-target-class=false
。