有关使用注释构建 Spring MVC 应用程序的资源

Resources on building Spring MVC Applications using Annotations

我最近加入的公司开发了所有 Spring 基于 MVC 的项目,这些项目充分利用了注释,并且很少甚至不使用 XML(我目前正在从事的项目仅使用 tiles.xml 用于磁贴配置)。

我过去阅读的绝大多数书籍和教程都侧重于 XML 配置。为了跟上开发团队的步伐,我以 "reverse engineering" 的方式工作,在我的项目中搜索我不熟悉的东西。

显然这很耗时且适得其反,因为我有各个方面的零散参考(一个教程中如何配置 bean,另一个教程中如何配置解析器等)。

官方 Spring 文档已证明在许多领域非常有用,但我更愿意阅读基于注释的 tutorials/book 的 tutorial/series 并将官方文档用于 reference/cross-check.

有什么建议吗?

对我来说这真的很有用。 http://websystique.com/spring-4-mvc-tutorial/

我现有项目之一的配置可能对您有所帮助。

AppInitializer.java 而不是 web.xml

@Configuration
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

@Override
protected Class<?>[] getServletConfigClasses() {
    return null;
}

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

AppConfig.java 配置 spring mvc

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "com.aaaa.bbbb")
public class AppConfig extends WebMvcConfigurerAdapter {

@Bean
public ViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass(JstlView.class);
    viewResolver.setPrefix("/WEB-INF/pages/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
}

public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    return messageSource;
}
}

和休眠配置

@Configuration
@EnableTransactionManagement
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfiguration {
@Autowired
private Environment environment;

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
    sessionFactory.setDataSource(dataSource());
    sessionFactory.setPackagesToScan(new String[] { "com.jjjj.kkkk.pojo" });
    sessionFactory.setHibernateProperties(hibernateProperties());
    return sessionFactory;
}

@Bean(name = "dataSource")
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
    dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
    dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
    dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
    return dataSource;
}

private Properties hibernateProperties() {
    Properties properties = new Properties();
    properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
    properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
    properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
    properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("hibernate.automaticschema"));
    properties.put("hibernate.search.default.directory_provider",
            environment.getRequiredProperty("hibernate.search.default.directory_provider"));
    properties.put("hibernate.search.default.indexBase",
            environment.getRequiredProperty("hibernate.search.default.indexBase"));

    return properties;
}

@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
    HibernateTransactionManager txManager = new HibernateTransactionManager();
    txManager.setSessionFactory(s);
    return txManager;
}
}

谢谢