当我在应用上下文中定义波纹管控制器时,尝试使用它时出现重复错误。
如何在不获取重复错误消息的情况下将构造函数参数传递给控制器?
我的应用程序上下文:
<context:component-scan base-package="org.brickred.socialauth.spring.controller" />
<bean id="socialAuthWebController" class="org.brickred.socialauth.spring.controller.SocialAuthWebController">
<constructor-arg value="http://www.mysite.com/" />
<constructor-arg value="/authSuccess.html" />
<constructor-arg value="/failed.html" />
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
带注释的控制器: @Controller
@RequestMapping("/socialauth")
public class SocialAuthWebController {
private String baseCallbackUrl;
private String successPageURL;
private String accessDeniedPageURL;
@Autowired
private SocialAuthTemplate socialAuthTemplate;
@Autowired
private SocialAuthManager socialAuthManager;
private final Log LOG = LogFactory.getLog(getClass());
/**
* Constructs a SocialAuthWebController.
*
* @param applicationUrl
* the base URL for this application (with context e.g
* http://opensource.brickred.com/socialauthdemo, used to
* construct the callback URL passed to the providers
* @param successPageURL
* the URL of success page or controller, where you want to
* access sign in user details like profile, contacts etc.
* @param accessDeniedPageURL
* the URL of page where you want to redirect when user denied
* the permission.
*/
@Inject
public SocialAuthWebController(final String applicationUrl,
final String successPageURL, final String accessDeniedPageURL) {
this.baseCallbackUrl = applicationUrl;
this.successPageURL = successPageURL;
this.accessDeniedPageURL = accessDeniedPageURL;
}
...
其余的源代码位于http://code.google.com/p/socialauth/source/browse/trunk/socialauth-spring/src/org/brickred/socialauth/spring/controller/SocialAuthWebController.java
我收到以下错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'socialAuthWebController' defined in URL [jar:file://Tomcat%207.0/webapps/ROOT/WEB-INF/lib/socialauth-spring-2.0-beta2.jar!/org/brickred/socialauth/spring/controller/SocialAuthWebController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.String]: : No matching bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
最佳答案
正如其他帖子所指出的那样,由于在XML和批注中定义了相同的Controller,您将收到错误消息。删除控制器的XML配置并执行以下操作:
由于成功和失败URL并不是真正的配置值,而是在您的应用中定义的,因此将1)作为硬编码值直接移到处理程序方法中,或者将2)作为多个方法或控制器所共有的URL,将它们作为常量移动到所有其他Controller扩展的BaseController中。然后,您完全避免了这两个参数的DI问题。
剩下baseCallbackUrl
。如果这是一个依赖于应用程序URL的值,则可以将该值用作系统变量,然后使用@Value
直接注入它,如下所示:
@Value("#{systemProperties.baseCallbackUrl}")
private String baseCallbackUrl;