赞
踩
重量级企业开发框架EJB的替代品,通过依赖注入、面向切面编程,使用简单Java对象POJO为企业Java开发提供了相对简单的方法。
组件代码轻量级
配置重量级
基于注解的组件扫描、基于Java配置虽然减少甚至消除了大量XML配置,还是需要不少配置。
如下,需要XML或Java显式配置:
开启Spring特性 ---- 事务管理、SpringMVC;
启用第三方库 ---- 如基于Thymeleaf的Web视图;
配置Servlet和过滤器;
相关库依赖,不同库之间版本冲突
Spring旨在简化J2EE企业应用程序开发,SpringBoot旨在简化Spring开发,减少配置文件,开箱即用。
是一系列依赖关系的集合,简化了项目的依赖关系,大大方便了我们开发导入依赖。
如: 没有他之前,我们开发REST服务或Web应用程序时,需要手动一个一个添加SpringMVC、Tomcat、Jackson等库,
有了他之后只要添加spring-boot-starter-web一个依赖就行了。
Name | Servlet Version |
---|---|
Tomcat9.0 | 4.0 |
Jetty9.4 | 3.1 |
Undertow2.0 | 4.0 |
你还可以将Spring引导应用程序部署到任何Servlet3.1+兼容的Web容器中。
@SpringBootConfiguration
允许上下文中注册额外的bean或导入其他配置类
@ComponentScan
扫描被@Component(@Service、@Controller等)注解的bean,注解默认会扫描改类所在包下的所有类
@EnableAutoConfiguration
启用SpringBoot的自动配置机制
原理是根据@import,将符合配置条件的bean加载到Ioc容器中。
@Autowired
自动导入对象到类中,被注入进的类同样要被 Spring 容器管理。
@RestController
@RestController 注解是 @Controller和 @ ResponseBody 的合集,
表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST风格的控制器。
@Component
通用的注解,可标注任意类为 Spring 组件。
如果一个 Bean 不知道属于哪个层,可以使用 @Component 注解标注。
@Repository :
对应持久层即 Dao 层,主要用于数据库相关操作。
@Service
对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
@Controller
对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
@RequestParam 以及 @Pathvairable
@PathVariable用于获取路径参数,
@RequestParam用于获取查询参数。
@RequestBody
用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的body 部分,并且 Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。
系统会使用 HttpMessageConverter 或者自定义的 HttpMessageConverter 将请求的 body 中的 json 字符串转换为 java 对象。
@Value("${wuhan2020}")
String wuhan2020;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource("classpath:website.properties")
@Getter
@Setter
class WebSite {
@Value("${url}")
private String url;
}
使用:
@Autowired
private WebSite webSite;
System.out.println(webSite.getUrl());//https://javaguide.cn/
Bean 映射工具有属性拷贝类功能,可以帮助我们节省大量的 set 和 get 操作。
常用如下:
Spring BeanUtils、MapStruct、Apache BeanUtils、ModelMapper、Dozer、Orika、JMapper 。
推荐用MapStruct、Spring BeanUtils
只需要引入要 spring-boot-starter-web 依赖就够了,它的子依赖包含了我们所需要的东西。
使用示例:
@Data @AllArgsConstructor @NoArgsConstructor public class Person { @NotNull(message = "classId 不能为空") private String classId; @Size(max = 33) @NotNull(message = "name 不能为空") private String name; @Pattern(regexp = "((^Man$|^Woman$|^UGM$))", message = "sex 值不在可选范围" @NotNull(message = "sex 不能为空") private String sex; @Email(message = "email 格式不正确") @NotNull(message = "email 不能为空") private String email; }
我们在需要验证的参数上加上了 @Valid 注解,如果验证失败,它将抛出 MethodArgumentNotValidException 。
默认情况下,Spring 会将此异常转换为 HTTP Status 400(错误请求)。
@RestController
@RequestMapping("/api")
public class PersonController {
@PostMapping("/person")
public ResponseEntity<Person> getPerson(@RequestBody @Valid Person person)
return ResponseEntity.ok().body(person);
}
}
一定一定不要忘记在类上加上 Validated 注解了,这个参数可以告诉 Spring 去校验方法参数。
@RestController
@RequestMapping("/api")
@Validated
public class PersonController {
@GetMapping("/person/{id}")
public ResponseEntity<Integer> getPersonByID(@Valid @PathVariable("id") @M
return ResponseEntity.ok().body(id);
}
@PutMapping("/person")
public ResponseEntity<String> getPersonByName(@Valid @RequestParam("name")
return ResponseEntity.ok().body(name);
}
}
创建一个定时任务
@Component
public class ScheduledTasks {
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.c
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("H
/**
* fixedRate:固定速率执行。每5秒执行一次。
*/
@Scheduled(fixedRate = 5000)
public void reportCurrentTimeWithFixedRate() {
log.info("Current Thread : {}", Thread.currentThread().getName());
log.info("Fixed Rate Task : The time is now {}", dateFormat.format(new
}
}
1
Netty主要参考链接如下:
Netty 介绍和应用场景(一)
持续更新中…
随心所往,看见未来。Follow your heart,see light!
欢迎点赞、关注、留言,一起学习、交流!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。