2016-08-10 68 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。