ironsmile

ironsmile 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

ironsmile 发布了文章 · 2016-11-29

Spring零配置文件项目搭建

本文主要记录Spring零配置的方法,包括相关类以及注解的使用方法。

Servlet配置

传统的servlet都是在web.xml中配置,从Servlet 3.0开始提供了ServletContainerInitializer接口,允许使用代码去配置servletsfilterslisteners

Spring为我们提供了一个该接口的实现类SpringServletContainerInitializer,查看源代码可以知道该类通过@HandlesTypes()注解指定了onStartup()方法的第一个参数接收WebApplicationInitializer实现类的集合。所以如果我们要使用这种方式配置servlet,只需要实现WebApplicationInitializer接口即可。

具体实现代码:

public class WebInitializer implements WebApplicationInitializer {

    private static final Logger logger = LoggerFactory.getLogger(WebInitializer.class);

    @Override
    public void onStartup(javax.servlet.ServletContext servletContext) throws ServletException {
        logger.info("begin init web application.");

        //配置Spring
        AnnotationConfigWebApplicationContext springContext = new AnnotationConfigWebApplicationContext();
        springContext.register(SpringConfig.class);
        
        //添加linstener
        servletContext.addListener(new ContextLoaderListener(springContext));

        //添加servlet
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
                "dispatcher", new DispatcherServlet(springContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

        //添加filter
        LoggerFilter loggerFilter = new LoggerFilter();
        FilterRegistration.Dynamic logFilterRegistration=container.addFilter("requestResponseLogFilter", loggerFilter);
        logFilterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC), false, "/*");

        logger.info("init web application success.");
    }
}

Spring配置

Spring的配置主要就是配置各种Bean,主要是要了解几种注解的使用方法。

@Configuration

使用@Configuration注解的类相当于传统配置文件中的Beans,该类中的方法可以通过@Bean标注成为Bean。

@Configuration
public class SpringConfig {
    @Bean(name = "exampleBean")
    public ExampleBean getExampleBean() {
        return new ExampleBean();
    }
}
@ComponentScan

使用@ComponentScan用来标明要扫描注解的包,相当于配置文件中的context:component-scan,Spring会自动扫描注册指定包中使用注解指定的Bean。

@ComponentScan(basePackages = {"com.example.service","com.example.dao"})
@PropertySource

使用@PropertySource注解可以引入properties配置文件,通过注入Environment对象可以很方便的拿到配置文件中的内容。

@Configuration
@PropertySource("classpath:config.properties")
@ComponentScan(basePackages = {"com.example.service","com.example.dao"})
public class SpringConfig {

    @Autowired
    private Environment env;

    @Bean(name = "mysqlDataSource")
    public DataSource mysqlDataSource() {
        ProxoolDataSource dataSource = new ProxoolDataSource();
        dataSource.setDriver(env.getProperty("ds.driver.classname"));
        dataSource.setDriverUrl(env.getProperty("ds.url"));
        dataSource.setUser(env.getProperty("ds.username"));
        dataSource.setPassword(env.getProperty("ds.password"));
        dataSource.setPrototypeCount(env.getProperty("proxool.prototype", Integer.class));
        dataSource.setMinimumConnectionCount(env.getProperty("proxool.minimum", Integer.class));
        dataSource.setMaximumConnectionCount(env.getProperty("proxool.maximum", Integer.class));
        dataSource.setSimultaneousBuildThrottle(env.getProperty("proxool.simultaneous", Integer.class));
        dataSource.setTestBeforeUse(true);
        dataSource.setHouseKeepingTestSql(env.getProperty("proxool.testSql"));
        return dataSource;
    }

}

config.properties文件内容:

ds.driver.classname=com.mysql.jdbc.Driver
ds.url=jdbc:mysql://...
ds.username=...
ds.password=...
...
查看原文

赞 2 收藏 4 评论 2

ironsmile 提出了问题 · 2015-11-26

struts2上传文件部分格式文件无法上传

在本地测试都没有问题,但是部署到服务器就会出现问题。
服务器的操作系统是windows server 2008,上传rar、docx、txt、xlsx文件没有问题,但是上传exe、doc、xls就会报错,错误信息如下:

java.io.FileNotFoundException: D:\files\test.xls (拒绝访问。)

修改过文件夹的访问权限,但是没有用。struts2也没有限制上传类型。

关注 1 回答 0

ironsmile 回答了问题 · 2015-10-20

百度注册为何没有ajax就能返回该邮箱已经注册过?

专门去试了下,有ajax请求的。
图片描述

关注 3 回答 2

ironsmile 关注了问题 · 2015-08-10

解决什么是 RESTful ?到底 REST 和 SOAP、RPC 有何区别?

什么是 RESTful ?到底 REST 和 SOAP、RPC 有何区别?

关注 53 回答 6

ironsmile 回答了问题 · 2015-07-08

静态页面Demo项目,如何将header和footer 像PHP一样 include?

可以用jquery的load方法,直接将需要的文件加载到页面中。
$('className').load('page/header.html');

关注 19 回答 15

ironsmile 关注了问题 · 2015-06-14

解决SQL语句如何实现没有这条数据就添加,有这条数据就修改

如一张表有两个字段id和n,如果存在某个id,就将这个id对应的n值加1;不存在就将向表中插入这个id并把n的值设置成0

关注 6 回答 2

ironsmile 提出了问题 · 2015-04-27

解决多角色系统中的数据库设计问题

一个系统中有多个角色,每个角色有不同的属性。比如教师和学生,教师有职称、所属院系等属性,而学生有班级、指导教师等属性,所以把教师和学生分为了两个表。

现在系统中有一个消息系统,存放消息的表该如何设计?如果发一条消息,需要指定发件人和收件人,难道需要在消息表中定义四个外键,比如发件人1(教师)、发件人2(学生)、收件人1(教师)、收件人2(学生)。这样会不会太麻烦了,如果再多几个角色该怎么办?

想到一种方法,建一个用户基础信息表,放几个角色共有的属性,然后对应每一个角色再建一个表。在用户基础信息表中建立外键,连接到每一个角色对应的表。不过这样,如果角色多的话,用户基础信息表中的外键就比较多。还有就是查询一个用户信息的时候,需要连接的表的数量多,比如要查一个学生信息,要连接用户基础信息表、学生表、班级表等。不知道这样做合适吗。

关注 7 回答 3

ironsmile 提出了问题 · 2015-04-26

解决数据库中的历史数据的处理问题

比如一个教务管理系统,学生毕业之后,这些学生的数据该如何处理?如果导出来放起来,管理员查看起来不方便。但是如果新建一个字段把毕业的学生做个标记,学生越来越多,学生表查询起来会影响效率。

还有一个问题就是比如在删除一个教师的时候并不能真的将其从数据库删除,因为在查看档案时,还要有这个教师的信息,这时候又该如何处理?

关注 5 回答 2

ironsmile 关注了问题 · 2015-04-17

一道MySQL优化查询的面试题

前几天面试碰到一个数据库(MySQL)优化查询的问题:

说一张表里有1千万条数据,有一个字段status有两个值(1待审核、2审核通过),然后呢有两个列表即待审核列表与审核通过的列表,那么如何优化查询SQL使其列表的查询速度达到最快?

我没答上来,其实我本来想说给status字段加索引,但细想由于它的值重复性太多,即使加了索引效果也不明显,所以我不知道如何去优化这样的查询。

关注 65 回答 21

ironsmile 关注了问题 · 2015-03-19

解决在java开发时常遇到定时的业务,大家说说自己的项目中都是怎么做的呀,不用很详细

比如要做一个5点下线的团购,但是如果不用定时器做的话,5点后没人访问,就一直是开启状态,直到第一个人去触发下架动作,这期间要写数不清的烂代码,恳请前辈点拨

关注 13 回答 10

认证与成就

  • 获得 5 次点赞
  • 获得 10 枚徽章 获得 0 枚金徽章, 获得 3 枚银徽章, 获得 7 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2014-07-13
个人主页被 223 人浏览