1.springboot之Starter POMs
用于自动搭建项目快速运行
Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合。你可以获取所有spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。例如,如果你想使用Spring和JPA进行数据库访问,只需要在你的项目中包含spring-boot-starter-data-jpa依赖(在pom.xml中声明),然后你就可以开始使用了
该starters包含很多你搭建项目,快速运行所需的依赖,并提供一致的,管理的传递依赖集
名字有什么含义:
所有的starters遵循一个相似的命名模式:spring-boot-starter-xxx,在这里xxx是一种特殊类型的应用程序。该命名结构旨在帮你找到需要的starter。很多IDEs集成的Maven允许你通过名称搜索依赖
2. springboot常用注解
@SpringBootApplication:
包含@Configuration、@EnableAutoConfiguration、@ComponentScan
通常用在主类上
@Repository:
用于标注数据访问组件,即DAO组件。
@Service:
用于标注业务层组件。
@RestController:
用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody
@ResponseBody:
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据
@Component:
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
@ComponentScan:
组件扫描。个人理解相当于< context:component-scan>,如果扫描到有@Component @Controller @Service等这些注解的类,则把这些类注册为bean
等等
3.springboot之依赖集锦pom.xml(更新中)
4.SpringBoot yml 配置
在 spring boot 中,有两种配置文件,一种是application.properties,另一种是application.yml,两种都可以配置spring boot 项目中的一些变量的定义,参数的设置等。下面来说说两者的区别:
application.properties 配置文件在写的时候要写完整,如:
spring.profiles.active=dev
spring.datasource.data-username=root
spring.datasource.data-password=root
在yml 文件中配置的话,写法如下:
spring:
profiles:
active: prod
datasource:
username: root
password: root
yml 文件在写的时候层次感强,而且少写了代码。所以现在很多人都使用yml配置文件
(2)在项目中配置多套环境的配置方法。
现在一个项目有好多环境,开发环境,测试环境,准生产环境,生产环境,每个环境的参数不同,所以我们就可以把每个环境的参数配置到yml文件中,这样在想用哪个环境的时候只需要在主配置文件中将用的配置文件写上就行如下:
首先我们需要在pom.xml中配置多个profile
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
<packaging>war</packaging>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>local</id>
<properties>
<env>local</env>
<packaging>war</packaging>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
<packaging>war</packaging>
</properties>
</profile>
</profiles>
然后在pom.xml的build中添加过滤器
<filters>
<filter>src/main/resources/profiles/${env}.properties</filter>
</filters>
然后添加资源声明:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
上面我们使用profile声明了三个环境的配置,使用过滤器使开启多环境的配置,这个配置有三个值分别是dev、local、prod,使用resources标签声明这三个配置文件所在的位置是资源
进行了上面的配置之后,就可以在application.properties中使用@@来引用dev.properties,local.properties,prod.properties等配置文件中的值了
(3)配置文件数据的读取:
比如我在文件中配置了一个
massage:
data:
name: qibaoyi
我在类中想要获取他 需要这样去写:
@Value("${message.data.name}")
private String name;
(4)YAML 语法
- 使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不能使用 Tab,各个系统 Tab对应的 Space 数目可能不同,导致层次混乱)
- ‘#’表示注释,只能单行注释,从#开始处到行尾
- 破折号后面跟一个空格(a dash and space)表示列表
- 用冒号和空格表示键值对 key: value
- 简单数据(scalars,标量数据)可以不使用引号括起来,包括字符串数据。用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符
5.使用spring validation完成数据后端校验
数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的邮箱格式,也会让运维人员头疼不已
在@Controller中校验数据
springmvc为我们提供了自动封装表单参数的功能,一个添加了参数校验的典型controller如下所示
@RequestMapping("/foo")
public String foo(@Validated Foo foo <1>, BindingResult bindingResult <2>) {
值得注意的地方:
<1> 参数Foo前需要加上@Validated注解,表明需要spring对其进行校验,而校验的信息会存放到其后的BindingResult中。注意,必须相邻,如果有多个参数需要校验,形式可以如下。foo(@Validated Foo foo, BindingResult fooBindingResult ,@Validated Bar bar, BindingResult barBindingResult);即一个校验类对应一个校验结果。
6.关于BeanUtils.copyProperties的用法和优缺点
BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理
例如:
BeanUtils是这个包里比较常用的一个工具类,它的copyProperties()方法
如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如 Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是对属性逐个赋值:
而使用BeanUtils后,代码就大大改观了,如下所示:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋值
BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher对象到数据库
HibernateDAO.save(teacher);
如果Teacher和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理
这样一来大大解放了我们的双手,提升了效率
除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与 BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些。
但是还有一个坏消息:使用BeanUtils的成本惊人地昂贵!一个简单的测试,BeanUtils所花费的时间要超过取数据、将其复制到对应的 value对象(通过手动调用get和set方法),以及通过串行化将其返回到远程的客户机的时间总和。所以要小心使用这种威力!
7.Lombok介绍及使用方法
lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。
使用lombok会使你的代码看起来更加简洁,写起来也更加方便
lombok使用:
lombok使用过程中主要是靠注解起作用的,其中几个比较常用的:
@NonNull: 可以帮助我们避免空指针。
也就是说我们可以使用这个注解确保我们需要使用的对象不会是null的
@Cleanup: 自动帮我们调用close()方法。
用在io操作过程中
@Getter / @Setter: 自动生成Getter/Setter方法
@Data: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!
8.Junit
JUnit是一个Java语言的单元测试框架,Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能
Junit 能简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度