博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring学习笔记1——IOC: 尽量使用注解以及java代码(转)
阅读量:6629 次
发布时间:2019-06-25

本文共 11700 字,大约阅读时间需要 39 分钟。

在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目。

预想的基本流程如下:

1、用户网站注册,填写用户名、密码、email、手机号信息,后台存入数据库后返回ok。(学习IOC,mybatis,SpringMVC的基础知识,表单数据验证,文件上传等)

2、服务器异步发送邮件给注册用户。(学习消息队列)

3、用户登录。(学习缓存、Spring Security)

4、其他。

边学习边总结,不定时更新。项目环境为Intellij + Spring4。

 

一、准备工作。

1、mysql中建库建表。

 

2、Intellij中创建maven webapp工程。

(1) pom.xml中导入需要的依赖包。

复制代码
4.0.0
com.everSeeker
register
war
1.0
register Maven Webapp
http://maven.apache.org
4.3.1.RELEASE
org.springframework
spring-context
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
junit
junit
4.12
org.springframework
spring-test
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-web
${spring.version}
javax.validation
validation-api
1.1.0.Final
org.hibernate
hibernate-validator
5.2.4.Final
javax.servlet
javax.servlet-api
3.1.0
javax.servlet
jstl
1.2
org.springframework
spring-jdbc
${spring.version}
mysql
mysql-connector-java
6.0.3
org.mybatis
mybatis
3.4.1
org.mybatis
mybatis-spring
1.3.0
c3p0
c3p0
0.9.1.2
java_config_web
org.apache.maven.plugins
maven-war-plugin
2.2
false
复制代码
pom.xml

(2) 工程目录结构如下所示:

 

二、Mybatis

1、配置mysql数据库的基本信息。

复制代码
# Databasedb.mysql.driverClass = com.mysql.jdbc.Driverdb.mysql.jdbcUrl = jdbc:mysql://localhost:3306/register_notice?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=truedb.mysql.user = rootdb.mysql.password = 333db.minPoolSize = 10db.maxPoolSize = 100db.initialPoolSize = 20db.maxIdleTime = 60db.acquireIncrement = 5db.maxStatements = 100db.idleConnectionTestPeriod = 60db.acquireRetryAttempts = 30db.breakAfterAcquireFailure = truedb.testConnectionOnCheckout = false
复制代码
db.properties

 

2、配置mybatis.xml以及spring-mybatis.xml。

复制代码
复制代码
mybatis.xml
复制代码
复制代码
spring-mybatis.xml

 

3、创建User类以及UserDao接口。

复制代码
public class User {    @Size(min = 32, max = 32, message = "uuid应该为32位字符串")    private String id;    @Size(min = 1, max = 32, message = "账号长度应该在1-32位之间")    private String username;    @NotEmpty(message = "密码不能为空")    private String password;    @NotEmpty(message = "email不能为空")    @Email(message = "email格式不正确")    private String email;    @Size(min = 11, max = 11, message = "手机号长度为11位")    private String cellphone;    private long regDate;    public User() {        this.id = UUID.randomUUID().toString().replaceAll("-", "");        this.regDate = 0;    }    public User(String username, String password, String email, String cellphone) {        this(username, password, email, cellphone, new Date().getTime());    }    public User(String username, String password, String email, String cellphone, long regDate) {        this.id = UUID.randomUUID().toString().replaceAll("-", "");        this.username = username;        this.password = password;        this.email = email;        this.cellphone = cellphone;        this.regDate = regDate;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getCellphone() {        return cellphone;    }    public void setCellphone(String cellphone) {        this.cellphone = cellphone;    }    public long getRegDate() {        return regDate;    }    public void setRegDate(long regDate) {        this.regDate = regDate;    }    @Override    public String toString() {        return "[User: id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + ", cellphone=" +                cellphone + ", regDate=" + regDate + "]";    }}
复制代码
User.java

User.java中的@NotNull, @NotEmpty, @Size以及@Email等注释暂时忽略,以后解释。

@Repositorypublic interface UserDao {    void addUser(User user);    User getUserByUsername(String username);}
UserDao.java

 

4、在src/main/resources/mapper目录下创建UserMapper.xml映射文件,实现UserDao接口中的方法。注:*Mapper.xml文件必须放在src/main/resources目录下,之前放在src/main/java/com/everSeeker/dao目录下,产生了莫名奇妙的错误。

复制代码
INSERT INTO user(id, username, password, email, cellphone, regDate) VALUES(#{id}, #{username}, #{password}, #{email}, #{cellphone}, #{regDate})
复制代码
UserMapper.xml

 

三、IOC

1、创建IOC容器,通过注解方式,RootConfig.java。

复制代码
@Configuration@ComponentScan(basePackages = {"com.everSeeker"}, excludeFilters = {        @ComponentScan.Filter(type = FilterType.CUSTOM, value = RootConfig.WebPackage.class)})@ImportResource({"classpath:spring-mybatis.xml"})public class RootConfig {    public static class WebPackage extends RegexPatternTypeFilter {        public WebPackage() {            super(Pattern.compile("com\\.everSeeker\\.web"));        }    }}
复制代码

@Configuration: 表明这是一个配置类。

@ComponentScan: 启用组建扫描,basePackages:需要扫描的基础package。excludeFilters: 符合filter条件的不扫描。

@ImportResource: 引入xml文件。

@PropertySource: 引入properties文件。

 

2、由于创建的是webapp项目,并且采用了SpringMVC,那么DispatcherServlet是核心。以前的Spring版本中,一般会配置在web.xml中。而在Spring4中,可以在Java代码中来实现。WebAppInitializer.java。

复制代码
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {  //继承了AbstractAnnotationConfigDispatcherServletInitializer的类会自动配置DispatcherServlet和Spring应用上下文    @Override    protected String[] getServletMappings() {       //将DispatcherServlet映射到"/"        return new String[] { "/" };    }    /**     * RootConfig类用来配置ContextLoaderListener创建的应用上下文中的bean,     * 比如@Repository, @Service等组件     */    @Override    protected Class
[] getRootConfigClasses() { return new Class
[] { RootConfig.class }; } /** * DispatcherServlet加载应用上下文时,使用定义在WebConfig配置类中的bean, * 用来加载包含Web组件的bean,比如控制器,视图解析器以及处理器映射, @Controller, @RequestMapping等 */ @Override protected Class
[] getServletConfigClasses() { return new Class
[] { WebConfig.class }; } @Override protected void customizeRegistration(ServletRegistration.Dynamic registration) { //限制上传文件的大小不超过2MB,整个请求不超过4M,所有上传的文件都要写到磁盘中 registration.setMultipartConfig(new MultipartConfigElement("/tmp/uploads", 2097152, 4194304, 0)); }}
复制代码

 

3、创建WebConfig.java。

复制代码
@Configuration@EnableWebMvc@ComponentScan("com.everSeeker.web")public class WebConfig extends WebMvcConfigurerAdapter {    //配置jsp视图解析器    @Bean    public ViewResolver viewResolver() {        InternalResourceViewResolver resourceViewResolver = new InternalResourceViewResolver();        resourceViewResolver.setPrefix("/WEB-INF/views/");        resourceViewResolver.setSuffix(".jsp");        resourceViewResolver.setExposeContextBeansAsAttributes(true);        return resourceViewResolver;    }    //配置multipart解析器, 上传文件用    @Bean    public MultipartResolver multipartResolver() throws IOException {        return new StandardServletMultipartResolver();    }    //配置静态资源的处理    @Override    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {        configurer.enable();    }}
复制代码

@Bean: 声明这个方法会创建所需类型的实例,并注册为Spring应用上下文中的bean。

 

1、参考文献:Spring实战(第4版)。

2、传送门:。

http://www.cnblogs.com/everSeeker/p/5667503.html

 

转载于:https://www.cnblogs.com/softidea/p/5668676.html

你可能感兴趣的文章
ibatis批量新增-自增长序列
查看>>
linux系统管理之九:rpm安装包
查看>>
Linux系统中查看日志的常用命令
查看>>
java基础(二) 自增自减与贪心规则
查看>>
VMWare View的组件
查看>>
Linux下date命令使用举例说明
查看>>
Centos6下SVN服务器(结合Apache)的搭建
查看>>
Reactor和Proactor模式
查看>>
实验:关于XPath中的13个轴
查看>>
品牌的网闸介绍
查看>>
手势滑动源码(适合新手)
查看>>
我的友情链接
查看>>
快速熟悉开源项目
查看>>
Linux Centos 6.2 装好PHP启动Apache错误libmysqlclient.so.18:
查看>>
我的开发工具包
查看>>
多版本python下,安装pip
查看>>
AndroidManifest.xml文件解析
查看>>
【我的V日志】2010年1月29日星期五
查看>>
我的友情链接
查看>>
六种微服务架构的设计模式
查看>>