public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    //指定配置类
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfig.class };
    }

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

    //将DispatchServlet映射到“/”
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }



}

  遵照传统的办法,像DispatchServlet这样的Servlet会部署于web.xml文件中,不过凭借Servlet3规范及Spring3.1增强,我们得以接纳java将DispatchServlet配置在Servlet容器被,下边体现开头化类文件

 图片 1

  在Test的环境下开展测试

  大家要DispatchServlet加载包含Web组件的bean,如控制器、视图解析器以及总计机映射,而ContextLoaderListener要加载应用中之其他bean,这多少个bean平时是使下后端平的中间层和数据层组件。

  实体类如下

 

创建WebInitializer需要继承AbstractAnnotationConfigDispatcherServletInitializer,因为继承该类的任意类都会自动地配置DispatchServlet和Spring应用上下文,Spring的应用上下文会位于应用程序的Servlet上下文之中。
   

 

  

 

 

    

@Configuration
@Import(HibernateConfig.class)//导入Hibernate配置文件
@ComponentScan(basePackages={"scau.zzf"},
        excludeFilters={
                @ComponentScan.Filter(type= FilterType.CUSTOM, value=RootConfig.WebPackage.class)
        }
)
public class RootConfig {
    //扫描除了web以外的所有包
    public static class WebPackage extends RegexPatternTypeFilter {
        public WebPackage() {
            super(Pattern.compile("scau.zzf\\.web"));
        }
    }

}

  

  

图片 2

@Configuration
@PropertySource(
        value={"classpath:ds/ds-jdbc.properties"},
        ignoreResourceNotFound = true)//加载在resources下的ds-jdbc.properties
public class HibernateConfig {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String jdbcURL;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    //配置sessionFactory
    @Bean
    public SessionFactory sessionFactoryBean() {
        try {
            LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean();
            lsfb.setDataSource(dataSource());
            //扫描实体类
            lsfb.setPackagesToScan("scau.zzf.entity");
            Properties props = new Properties();
            //设置方言 ,采用的是MySql
            props.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
            lsfb.setHibernateProperties(props);
            lsfb.afterPropertiesSet();
            SessionFactory object = lsfb.getObject();
            return object;
        } catch (IOException e) {
            return null;
        }
    }
    //配置DataSource
    @Bean
    public DataSource dataSource(){
        BasicDataSource ds=new BasicDataSource();
        ds.setDriverClassName(driverClassName);
        ds.setUrl(jdbcURL);
        ds.setUsername(username);
        ds.setPassword(password);

        return ds;
    }
  @Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}
}
 转载请说明出处:http://www.cnblogs.com/xxzhuang/p/5943410.html 多谢合作

  

  项目是于intellj IDE 下创设的maven项目,目录如下

  以选用xml配置spring的时段,必须安排spring监听器,也是不怕ContextLoaderListener,不过不少总人口未知底之是,ContextLoaderListener会创立spring
web 应用被的此外一个上下文。

秋在不断提升,大量因xml的配备所带的流弊也了然,在XML配置和直接声明式配置外还有一样种有趣的选料情势-JavaConfig,它是以Spring
3.0起头从一个独自的类型并入到Spring中之。它构成了XML的解耦和JAVA编译时检查的独到之处。JavaConfig可以当做一个XML文件,只不过是运Java编写的。现在脚为我们显示怎样编写基于java
Config 配置 spring+springmvc+hibernate。

  我们得看来底的AbstractAnnotationConfigDispatcherServletInitializer拓展和落实了WebApplicationInitializer,在Servlet3
环境中,容器会以看似路径中搜索实现了javax.servlet.ServletContainerInitializer接口的类,并将该类来布局Servlet容器,而spring提供了此接口的落实,名也SpringServletContainerInitializer,这些看似反过来又会合招来实现了WebApplicationInitializer的类似并以部署的职责交他们来成功,所以当我们WebInitializer拓展了AbstractAnnotationConfigDispatcherServletInitializer
,同时就落实了WebApplicationInitializer,因而当部署到Servlet3.0容器中之时段,容器就会自行发现他,并由此它们来安排Servlet上下文。

@Configuration
@EnableWebMvc //注解驱动springMVC 相当于xml中的<mvc:annotation-driven>
@ComponentScan("scau.zzf.web")//启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver=
                new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }
    //配置静态资源的处理,要求DispatchServlet对静态资源的请求转发到servlet容器中默认的Servlet上
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

  在test的条件下,类及之老三单讲明是大势所趋如果布局的,不然会出错。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebConfig.class, RootConfig.class})
@WebAppConfiguration
public class ServiceTest {


    @Autowired
    private UserService userService;
    @Test
    public void userServiceTest(){

        User user=userService.findUser(1);
        System.out.println(user.getUsername());
    }

}

 

  HbernateConfig 如下

  

  

@Entity
@Table(catalog = "hibernate",name = "users")
public class User {
    @Column
    private String username;
    @Column
    private String password;
    @Column
    private String sex;
    @Column
    private String address;
    @Column
    private int enabled;

    //GeneratedValue覆盖@id的默认访问策略
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
//    @GenericGenerator是在hibernate中定义的,使用hibernate内置的各种主键生成粗略生成主键值
//    @GenericGenerator(name = "hibernate-uuid",strategy = "uuid")
//    @GeneratedValue(generator = "hibernate-uuid")
    private int id;

    public int getEnabled() {
        return enabled;
    }

    public void setEnabled(int enabled) {
        this.enabled = enabled;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

  WebInitializer中求DispatchServlet加载应用上下文时,使用定义在WebConfig配置类似中之bean。

  也就是说WebConfig的类似吃会师因而来定义DispatcherServlet应用上下文的bean,RootConfig的好像中会为此来配置ContextLoadListener创制的上下文的bean

 

相关文章

网站地图xml地图