SpringBoot简单理解
SpringBoot
一、特点:
1.默认大于配置,不需要大量配置文件,没有web.xml,拥有可运行的Application类.
2.一般通过java代码配置,而尽量少使用xml配置。
3.maven中拥有大量的初始依赖,可以直接使用。
二、项目结构
1.Application.java必须与Controller所在的包、Dao所在的包等包位于同一层,否则无法打开页面
2.resource目录下的static目录里面的html文件,可以不走后台controller,直接从页面访问。
三、注解:
0.@SpringBootApplication可以用在启动类的上方。
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
} }
此注解包括了包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解。
1.@SpringBootConfiguration 继承至@Configuration,对于熟悉spring的开发者而言,此标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名
2.@EnableAutoConfiguration 这个注解就是springboot能自动进行配置的魔法所在了。主要是通过此注解,能所有符合自动配置条件的bean的定义加载到spring容器中,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置。
3.@ComponentScan 这个熟悉spring的开发者也应该熟悉,会扫描当前包及其子包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳入到spring容器中进行管理。
4.@RestController相当于@ResponseBody 加 @Controller
用@RestController修饰类,类里面的方法就相当于有了@ResponseBody,会通过Url生成json.
5.@RequestMapping的method包括RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT,RequestMethod.DELETE
6.@PostMapping、@DeleteMapping、@PutMapping、@GetMapping
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写
@PostMapping是一个组合注解 是@RequestMapping(method = RequestMethod.POST)的缩写
示例如下:
@RestController
public class UserController { @Autowired
private UserSerevice userService; @GetMapping(value = "/user")
public User findUserByName(String name){
User user =userService.findUserByName(name);
return user;
} }
7.@ModelAttribute注解有什么用?
修饰参数时,相当于@RequestParam
8.@RestControllerAdvice ,或者@ControllerAdvice 控制层通知器,可以用于统一拦截异常,进行响应处理。
9.@Value修饰变量,可以获取properties文件的属性值。比如@Value("${ datasource.url }")
@RestController
public class ConfigController { @Value("${ user }")
private String name; @GetMapping(value = "/name")
public String name(){
return "hello"+name ;
}
}
10.@Configuration可以完成类似xml配置bean的工作。在方法中返回实例,并在方法上方添加@Bean。
如下所示:
@Configuration
public class ShiroConfiguration { /**
* Shiro生命周期处理器
*/
@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
return new LifecycleBeanPostProcessor();
} @Bean
@DependsOn({"lifecycleBeanPostProcessor"})
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
advisorAutoProxyCreator.setProxyTargetClass(true);
return advisorAutoProxyCreator;
} }
11.@WebFilter可以添加过滤器Filter。类实现Filter接口,重写init(),doFilter(),destroy()方法。。并在类的上方添加@WebFilter注解,并指定过滤的路径urlPatterns。
@WebFilter(filterName="myFilter",urlPatterns="/*")
public class MyFilter implements Filter {
@Override
public void destroy() {
System.out.println("过滤器销毁");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("执行过滤操作");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("过滤器初始化");
}
}
四、SpringBoot MVC
Spring Boot MVC中,Web自动化配置。默认使用的视图是 ThymeLeaf
五、Spring Data JPA
1.数据持久层框架Spring Data JPA可以直接操作数据源,不需要手动创建数据库、配置数据源就可以使用。
使用方法: Dao接口继承JpaRepository,使用Jpa注解。另外,还得将实体体Entity与数据库进行映射。
可以通过实体类映射创建数据表。
六、模板引擎Thymeleaf
SpringBoot不推荐使用jsp做为视图,jsp会对性能产生影响。通常使用Thymeleaf
七、统一异常处理
1.在类上面添加注解@RestControllerAdvice ,或者@ControllerAdvice 控制层通知器,可以用于统一拦截异常,进行响应处理。
在方法上面添加注解@ExceptionHandler并写入对应的Exception类,比如@ExceptionHandler(value = MyException.class)
说明:
@ControllerAdvice是controller的一个辅助类,最常用的就是作为全局异常处理的切面类
@ControllerAdvice可以指定扫描范围
@ControllerAdvice约定了几种可行的返回值,如果是直接返回model类的话,需要使用@ResponseBody进行json转换
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody //在返回自定义相应类的情况下必须有,这是@ControllerAdvice注解的规定
public MyExceptionResponse exceptionHandler(RuntimeException e, HttpServletResponse response) {
//...
return resp;
}
}
八、安全管理
1.Spring Security、Shiro,可以通过安全框架进行权限管理。
九、单元测试
1.在maven中添加spring-boot-starter-test依赖,然后在单元测试类上面添加注解,如下示
@RunWith(SpringJUnit4ClassRunner.class) 表示通过Junit4类class运行
@SpringBootTest(classes = SpringBootDemoApplication.class) 这里的class对应的是SpringBoot的启动类class,根据项目启动类修改
2.可以在Junit中,进行依赖注入。简化初始化操作。
十、多数据源配置
多数据源配置,其实就是配置后可以连接多个数据库。
十一、监控
Actuator是Spring Boot提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans以及一些环境属性等
SpringBoot简单理解的更多相关文章
- SpringBoot深入理解
SpringBoot深入理解 项目打包SpringBoot启动过程 当使用打包时,会下载org-springframework-boot-loader的jar,并且不会放在lib存放的第三方jar包文 ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
- Deep learning:四十二(Denoise Autoencoder简单理解)
前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...
- 简单理解dropout
dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...
- 我们为之奋斗过的C#-----C#的一个简单理解
我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...
随机推荐
- 学习笔记20151211——AXI4 STREAM DATA FIFO
AXI4 STREAM DATA FIFO是输入输出接口均为AXIS接口的数据缓存器,和其他fifo一样是先进先出形式.可以在跨时钟域的应用中用于数据缓冲,避免亚稳态出现.支持数据的分割和数据拼接.在 ...
- iOS开发之 - 键盘处理神器 IQKeyboardManager
平常在开发中,用到输入框的地方不胜其数,当输入框位于屏幕底部时,弹起的键盘很可能覆盖输入框,导致用户看不到输入结果,体验较差...... IQKeyboardManager 可以很简单快捷的解决键盘遮 ...
- webpack 提升90%的构建速度 HardSourceWebpackPlugin
HardSourceWebpackPlugin 插件 不能提升第一次构建的速度,但对于第二次构建能提升99%的构建速度 第一次构建: 第二次: 提升了..,算不出来,反正就是很多啦~~~ npm in ...
- 折半查找(C语言)
一.二分查找 在C和C++里,二分查找是针对有序数组所用的一种快速查找元素的方法. 二.二分查找的条件以及优缺点 条件:针对有序数组(元素从小到大或从大到小) 优点:查询速度较快,时间复杂度为O(n) ...
- python中如何将两个list合并成一个list,不用for语句
1, add 2, 用list的extend方法,L1.extend(L2),该方法将参数L2的全部元素添加到L1的尾部,例如: 3, 用切片(slice)操作,L1[len(L1):len(L1)] ...
- BNF 和 ABNF 扩充巴科斯范式 了解
BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...
- Oracle XE自带数据库创建的过程
Oracle XE自带数据库如何创建的?XE.sql脚本定义实例究竟是怎样的?阅读下文,您可以找到这些问题的答案. Oracle XE自带数据库是如何创建的呢?这是很多人都提到过的问题,下面就为您详细 ...
- NUnit使用
NUnit是.net平台上使用得最为广泛的测试框架之一,本文将通过示例来描述NUnit的使用方法,并提供若干编写单元测试的建议和技巧,供单元测试的初学者参考. 继续下文之前,先来看看一个非常简单的测试 ...
- 解决PHPWind局域网不能访问问题
解决PHPWind局域网不能访问问题 windows 7环境下搭建PHPWind论坛之后,局域网内不能被访问,访问显示403:而本机访问正常 1. 本版本是windows下一键安装版,首先可以确定的是 ...
- rsync 通过密码文件实现远程同步
https://my.oschina.net/yyping/blog/91964 1.源文件服务器:192.168.10.203 2.备份服务器:192.168.10.88 配置备份服务器(192.1 ...