2016-08-10 111 views
0

我的大部分@Controller都是通過組件掃描獲取的。然而,少數例如我在Spring Social中使用的那些創建爲@Beans。我只是從大部分xml遷移到JavaConfig,並升級到Spring 4.1.9。@Bean控制器沒有被@EnableMVC拾起

但是,創建爲@Beans的Controller端點正在創建404s。

任何想法?

package nl.project.webapp.config; 

@Order(1) 
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[]{WebAppConfig.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class<?>[]{ServletConfig.class}; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[]{"/"}; 
    } 

    [...] 
} 

package nl.project.webapp.config; 

@Configuration 
@ComponentScan(basePackages = {"nl.project.webapp"},excludeFilters={ 
    @ComponentScan.Filter(type=FilterType.ANNOTATION,value=Controller.class), 
    @ComponentScan.Filter(type=FilterType.ANNOTATION,value=RestController.class) 
}) 
@Import({AppConfig.class,JPAConfig.class}) 
@PropertySource("classpath:msa.properties") 
public class WebAppConfig { 
    [...] 
} 

package nl.project.webapp.config; 

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = {"nl.project.webapp.controller"},includeFilters={ 
    @ComponentScan.Filter(type=FilterType.ANNOTATION,value=Controller.class), 
    @ComponentScan.Filter(type=FilterType.ANNOTATION,value=RestController.class)  
}) 
public class ServletConfig extends WebMvcConfigurerAdapter{ 
    [...]  
} 

package nl.project.webapp.social.config; 

@Configuration 
public class SocialConfig{ 

    @Bean 
    public MyConnectController connectController(MessageSource messages, UsorManager userMgr, PhotoManager photoMgr) { 

     MyConnectController connectController = new MyConnectController(connectionFactoryLocator, connectionRepository); 
     connectController.setConnectInterceptors(Arrays.asList(new ConnectInterceptor<?>[]{ 
      new TwitterConnectInterceptor(userMgr, photoMgr, messages), 
      new FacebookConnectInterceptor(userMgr, photoMgr, messages), 
      new LinkedInConnectInterceptor(userMgr, photoMgr, messages), 
      new GoogleConnectInterceptor(userMgr, photoMgr, messages), 
     })); 

     return connectController; 
    } 

    @Bean 
    public MySignInController signinController(MessageSource messages, UsorManager userMgr, PhotoManager photoMgr){ 

     MySignInController signinController = new MySignInController(connectionFactoryLocator, usersConnectionRepository, new SimpleSigninAdapter(userMgr)); 
     signinController.setSignInInterceptors(Arrays.asList(new ProviderSignInInterceptor<?>[]{ 
      new FacebookSigninInterceptor(userMgr, photoMgr, messages), 
      new LinkedInSigninInterceptor(userMgr, photoMgr), 
      new GoogleSigninInterceptor(userMgr, photoMgr) 
     })); 

     return signinController; 
    } 

} 


package nl.project.webapp.social.controller; 

@Controller 
@RequestMapping("/signin") 
public class MySignInController extends ProviderSignInController { 

    public MySignInController(
      ConnectionFactoryLocator connectionFactoryLocator, 
      UsersConnectionRepository usersConnectionRepository, 
      SignInAdapter signInAdapter) { 
     super(connectionFactoryLocator, usersConnectionRepository, signInAdapter); 
     this.connectionFactoryLocator = connectionFactoryLocator; 

    } 

[...] 

回答

0

該問題是由WebAppConfig導入SocialConfig而不是ServletConfig導致的。儘管文檔建議通過使用'@EnableWebMVC'來獲取上下文中可用的任何Controller bean,但不太清楚這不適用於通過webapp上下文加載的Controller bean。