Spring是一个java开发框架。为了解决企业级开发的业务逻辑层和其他层的耦合问题。
它是一个分层的JAVAEE 一站式轻量级框架。Spring负责基本的基础架构,java开发者可以专注于应用程序的开发。
Spring核心的特性,IOC和AOP。
IOC:spring是一个容器,管理业务bean。我们需要对象的时候,不需要new,找spring要。
控制反转:我们把创建对象的权力交给spring,我们需要就找spring要。
Spring也叫IOC容器,因为它管理了这些对象。
DI: 依赖注入,spring构建对象的时候,完成对象属性的赋值。
基本类型 @Value()
引用类型 @Autowried
AOP: 面向切面编程。
在不侵入原有代码基础上,实现功能的增强!!
重点是需要掌握这个思想。
1:@SpringBootApplication
位置:SpringBoot启动类上。 约定优于配置。
代表当前的项目启动了。理解为是多个注解的合并。
代表容器启动,里面还包含三个主要功能:
@EnableAutoConfiguration 启动springboot自动配置。底层回去扫描起步依赖中的配置信息。
@ComponentScan 扫描包中的类中是否有@Component注解 service的实现类Controler的类。
@Mapper
@Configuration 可以在启动类中使用spring语法,把一些Bean交给spring管理。
2:Spring管理Bean
2.1 @Autowired
public class Demo{
@Autowired
private JdbcTemplate jdbcTemplate;
}
@Autowired 自动从spring中导入对象到属性上。去spring中要这个类型的对象。
2.2 @Component @Service @Controller @Repository
@Component 通用的注解,标注该类的对象交给spring管理.
如果一个bean不知道属于那一层就使用这个注解表示交给spring管理。
@Service 服务层类的对象交给spring管理。
@Controller 控制层类的对象交给spring管理。
@Repository 数据访问层类的对象交给spring管理。
@Mapper 数据访问层接口的实现类对象交给spring管理。
2.3 @RestController
@Controller+@ResponseBody 的结合。
@ResponseBody 响应体的数据,要以json格式 返回。
说白了就是你写的处理方法的对象--json 写入到响应体中。
2.4 @Scope
声明bean的作用域,对象是单例还是多例的。
@Scope("singleton") 单例的 该类的对象,在整个项目中只有一个。 对象会随着spring容器的产生而产生,随着容器的关闭,而销毁。@Scope("prototype") 原型模式/多例 该类的对象,想要几个有几个,每次要都给新的。 对象不会随着spring容器的产生而产生的,你找spring要,spring就给new一个,给你了,spring不在维护它。 容器关闭和对象的销毁是没有关系的。
2.5 @Configuration
用来声明配置类的,交给spring管理的配置,语义化。一般来说配置类会有交给spring管理的对象 @Bean注解。
3:处理HTTP请求的注解
@RequestMapping
用在类上,作为请求前缀,用于区分不同业务的。
用在方法上,作为处理请求方法的,映射路径。
3.1 Get 请求 获取 查询
类 @RequestMapping("/user")
@GetMappring("/getById") 接受的get请求
/user/getById 找到指定的处理方法。
3.2 Post 请求 提交 添加
@PostMapping
3.3 Delete 请求 删除 删除
@DeleteMapping
3.4 Put 请求 设置 更新
@PutMapping
4:前后端传值
掌握好前后端传值的正确姿势,你开发的第一步 F12
4.1 参数在问号位置,或者是简单的表单提交。
可以不用注解处理,直接接收
/login?username=jack&password=123
@GetMapping("/login")
public R login(String username,String password){}//可以直接接收
@GetMapping("/login")
public R login(User user){}//可以对象形式接收
/register?hobby=抽烟&hobby=喝酒&hobby=烫头
@GetMapping("/register")
public R register(String[] hobby){}
@GetMapping("/register")
public R register(@RequestParam List<String> hobby){}
@RequestParam
① 用于解决前端参数名字 和 方法参数名字不一致问题。
② 用于收集 该名字的数据到集合中。
4.2 如果参数 在路径上 restful风格的url
/getById/12
@GetMapping("/getById/{id}")// 路径中{id}是占位用的
public R getById(@PathVariable("id")Integer id){}
@GetMapping("/getById/{id}")// 路径中{id}是占位用的
public R getById(@PathVariable Integer id){}
4.3 参数在请求体中 put请求和post请求。
前端传递的数据
请求体中 json格式的
请求地址 /login post方式
{
"username":"admin",
"password":"1234"
}
@PostMapping("/login")
public R login(@RequestBody Map map){}
@PostMapping("/login")
public R login(@RequestBody User user){}
@RequestBody : 从请求体中取出json格式的数据!!
注意:
一次请求只有一个请求体。
?请求参数可以有多个。
路径上的参数也可以有多个。
5:读取配置信息
yml配置文件。
qiniu:
name: 大牛
age: 19
5.1 @Value 形式 (常用)
@Value("${qiniu.name}")
private String name;
5.2 @ConfigurationProperties (常用)
通过这个注解来完成与bean绑定。把对应的属性数据 设置到 bean中
@Configuration
public class QiniuConfiguration {
@ConfigurationProperties("qiniu")
@Bean
public QiniuUtils qiniuUtils() {
return new QiniuUtils();
}
}
@Component
@ConfigurationProperties("qiniu")
@Data
public class QiNiu{
private String name;
private Integer age;
}
5.3 PropertySource (不常用)
专门把properties文件 读取到spring中。
6:处理全局异常
Spring针对程序中异常可以进行统一的针对性的处理。
思路就是 所有层次的异常都抛到Controller层,然后抓取到异常之后进行统一处理。
底层用到了AOP的原理,主要用的是异常后通知。
1:@ControllerAdvice 定义全局处理异常的类。
@RestControllerAdvice=@ControllerAdvice +@ResponseBody
2: @ExceptionHandler 注明抓取的异常,用在方法上,代表这个方法是处理这个异常的。
@ExceptionHandler({BusinessRuntimeException.class})
public Result businessRuntimeException(Exception e) {
// 不同于其它异常,这表示一种正常的业务逻辑,不要打印error级别的日志
log.info("", e);
//使用e.getMessage()作为提示语
return new Result(false, e.getMessage());
}
7:事务处理
7.1 @Transational 用在类上接口上,方法上。
标明该类上接口上的所有方法都要开启事务进行操作,也就是说一个方法就代表一个事务的开启,该方法里面包含的多个sql语句是在一个事务中进行的。从而达到事务的控制。
如果没有问题,正常提交。但凡一个sql出问题了,全部回滚。
7.2 @EnableTransationManagement 开启事务注解扫描
@EnableTransactionManagement
8.1 servlet技术也能用在boot上。
过滤器可以用在springboot上。
@Slf4j
@WebFilter(urlPatterns = "/*")
public class HealthSecurityFilter implements Filter {
}
@ServletComponentScann 扫描 servlet三大组件注解,三大组件对象交给spring管理。