使用Spring提供的@Configuration注解配置Spring的应用上下文
//spring应用上下文配置类
@Configuration
@ComponentScan(basePackageClasses={SpringConfiguration.class},
excludeFilters={@Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})//声明包扫描,并将@EnableWebMvc注解声明的类扫描包除去
@EnableTransactionManagement
@ImportResource(locations={"classpath:beans.xml"})
@PropertySource({"classpath:jdbc.properties"})//导入peoperties文件
public class SpringConfiguration {
/**
*简单配置数据源和hibernate的SessionFactory
*/
@Autowired
private Environment env;
@Bean(name="sessionFactory")
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sfb=new LocalSessionFactoryBean();
sfb.setDataSource(dataSource());
sfb.setPackagesToScan("org.learn.sshmvc.model");
Properties prop=new Properties();
prop.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
prop.setProperty("hibernate.show_sql", "true");
prop.setProperty("hibernate.hbm2ddl.auto", "update");
prop.setProperty("hibernate.format_sql", "false");
sfb.setHibernateProperties(prop);
return sfb;
}
@Bean(destroyMethod="close")
public BasicDataSource dataSource() {
BasicDataSource dataSource=new BasicDataSource();
dataSource.setUsername(env.getProperty("jdbc.username"));
dataSource.setPassword(env.getProperty("jdbc.password"));
dataSource.setUrl(env.getProperty("jdbc.url"));
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setInitialSize(1);
dataSource.setMinIdle(1);
dataSource.setMaxIdle(20);
return dataSource;
}
@Bean(name="transactionManager")
@Autowired
@Required
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager=new HibernateTransactionManager();
txManager.setSessionFactory(s);
return txManager;
}
}
再进行和SpringMVC相关的viewReslover和Contorller的配置
@Configuration
@EnableWebMvc//声明为mvc配置
@ComponentScan(basePackages={"org.learn.sshmvc.controller"})//扫描web controller
public class WebConfig extends WebMvcConfigurerAdapter{
/**
*继承WebMvcConfigurerAdapter类
*/
@Bean//配置InternalResourceViewResolver,和xml配置一样
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver=new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override//重写configureDefaultServletHandling方法,并允许静态资源直接访问
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
Web环境初始化的类,相当于在web.xml配置spring的监听器和DispatcherServlet(只有在Servlet3.0后的环境中才能使用)
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* 继承AbstractAnnotationConfigDispatcherServletInitializer
* 抽象类覆盖三个方法
*/
public class WebappInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override//配置Spring应用上下文的配置类
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfiguration.class};
}
@Override//配置web controller和view的配置类
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override//相当于在DispatcherServlet中配置路径"/"
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
这样就实现了不用再web.xml中配置spring了