后端三层:
web(表示层):
1.接收参数 2.调用service 3.返回结果
service(业务层):
1.调用dao 2.业务处理
dao(持久层):
操作数据库 方法 sql
为什么service层要有一个接口、一个实现类?
是为了解耦合:解开service和servlet的耦合
Spring框架(全称Spring Framework 是Spring核心)
Spring框架有两个大的核心知识点:SpringIOC和SpringAOP,它们两个合起来就是Spring框架。
整个SpringIOC做的事情就两件:
1.spring容器帮程序员创建对象。
2.帮程序员给对象中的属性赋值。
所以说SpringIOC思想的核心是改变了对象的创建者和关系的维护者。
SpringMVC框架
SpringMVC框架是为了简化原来的Servlet代码,原生servlet很多很麻烦,学完springmvc之后,servlet就很好写。
SpringBoot框架
SpringBoot框架是对Spring框架和SpringMVC框架的简化。
框架代码很少,主要是理解。
Spring框架下的注解:
1.@Component(让Spring帮忙创建对象)
Component是组件的意思,组件注解,声明在spring容器中每个都是一个小零件,只要把Component注解往类上一加,这个类创建(new)对象的动作就由spring容器来做。
底层是反射技术,扫描到component注解时就在底层用反射技术拿到类名然后创建类的对象。
程序员只负责写类,当spring扫描到component注解时就会创建类的对象,创建好之后会放入SpringIOC容器中(容器中就是放对象的)。
2.@Autowired(自动注入、自动装配)(让Spring帮忙给对象属性赋值)
Autowired的使用场景:当在service的对象里需要一个dao的对象的时候,spring扫描到autowired注解时,会在spring容器中寻找有没有一个dao的对象。
如果发现有,就会把进行自动赋值,把spring容器中的值赋值给service对象中的dao属性。
3.@Controller @Service @Repository(标注在自己开发的类上,用于将当前类对象放入Spring容器)
这三个注解的功能跟@Component类似,他们分别标注在不同的层上。
@Controller 标注在表示层的类上
@Service 标注在业务层的类上
@Repository 标注在持久层的类上
推荐使用这三个,当一个类实在不好归属在这三个层上时,再使用@Component
4.@Bean(标注在配置类中的方法上,用于将方法的返回值对象放入Spring容器)
这个注解一般标注在配置类中也就是**@Configuration**标注的类上
用来将第三方类加载到spring容器中
5.@Configuration(标注在配置类上,声明为配置类)
这个注解标注后,Spring容器启动时会自动加载这些类中的配置
6.@ComponentScan(标注到主配置类上,声明包的扫描范围)
注意 在test测试类时主配置类必须被导入
导入后可以通过扫描包加载子配置类
7.@Scope(用来定义Bean的作用域)
里面有五个属性值
- singleton 单例,对于一个类,只会创建一个对象,每次从容器中获取,拿到的都是这个对象
- prototype 多例,对于一个类,每次从容器中获取,都会创建一次,得到一个新的对象
- request 在web环境中,每个请求范围内会创建新的对象
- session 在web环境中,每个会话范围内会创建新的对象
- application 在web环境中,每个应用范围内会创建新的对象
8.@Qualifier和@Primary(管理赋值的类型)
@Qualifier要和@Autowired联合使用,标注在要赋值的属性上,代表在按照类型匹配的基础上,再按照指定名称匹配
(如果一个接口类有多个实现类用@Autowired会报错,@Qualifier里面指定要获取那个类型)
@Primary标注在实现类上,表示当一个接口有多个实现的类时,默认使用哪个作为主实现
9.@RunWith和@ContextConfiguration (对测试类进行优化)
下面是用法展示
@RunWith里面值一般固定
@ContextConfiguration里面的值一般写spring主配置类
10.@EnableAspectJAutoProxy(标注在Spring配置类中,激活切面自动代理)
11.@Aspect (标注切面类)
和@Componenty一起使用
12. @before,@after-returning,@after-throwing,@after(控制增强方法在切点方法的哪个位置执行)
- 前置通知(before):增强方法在切点运行之前执行
- 返回后通知(after-returning):增强方法在某切点正常完成后执行的通知,不包括抛出异常的情况
- 异常后通知(after-throwing):增强方法在某切点抛出异常退出时执行的通知
- 后置通知(after):增强方法在某切点退出的时候执行的通知(不论是正常返回还是异常退出)
注意所有增强方法要用public void修饰
13.@Around(环绕通知)
注解要写在public Object 方法名(ProceedingJoinPoint pjp)方法上
try { //写前置通知
obj=pjp.proceed();
//写返回后通知
return obj;
}catch (Throwable e){
//写异常后通知
throw new RuntimeException(e);
}finally {
//写后置通知
}
14.@execution(指定一组规则来匹配某些类中的方法,匹配中的就是切点 )
(* com.itheima.anno.LogAnno · * . * (…))
意思是匹配多个com.itheima.anno.LogAnno 类下面的 任意名称 任意参数的方法
… 两个点匹配的是0个或者多个对象
* 匹配一个或多个对象
15.@annotation(指定一个注解,凡是标有此注解的方法都是切点)
这个注解要写在@execution内
在使用前要自己定义一个注解 @annotation里面写全类名
16.@Order(写在切片类注解下面指定执行顺序)
数字越大执行顺序越靠后
16.@Transactional (带有这个注解的方法或类会交给spring进行事务管理)
事务特点:成功执行不回滚 一般出现异常会回滚
rollbackFor属性 指定一个异常 发生这个异常回滚
propagation属性 事务传播行为 有七个值
REQUIRED | 【默认值】需要事务,有则加入,无则创建新事务 |
---|---|
REQUIRES_NEW | 需要新事务,无论有无,总是创建新事务 |
SUPPORTS | 支持事务,有则加入,无则在无事务状态中运行 |
NOT_SUPPORTED | 不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务 |
MANDATORY | 必须有事务,否则抛异常 |
NEVER | 必须没事务,否则抛异常 |
NESTED | 如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务, 则开启一个新的事务。 内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。 而内层事务操作失败并不会引起外层事务的回滚。 |
SpringMVC下的注解
1.@EnableWebMvc(标注在Spring配置类开启SpringMVC功能)
2.@RequestMapping(用于建立请求URL和处理方法之间的对应关系)
- value: 等同于path,用于为当前方法绑定访问路径
- method:用于限制请求类型,如果省略此选项,代表不对请求类型做限制
标注在类上的时候类中所有方法共用一个路径
3.@ResponseBody(标注在发生响应给浏览器的方法上)
4.@Controller(标注在controller层的类上)
只有标注了这个方法的类才能使用RequestMapping
5.@RestController(相当于@Controller 和 @ResponseBody的功能)
6.@DateTimeFormat(标注在接受请求的方法的参数前面 用于接收指定格式日期参数)
属性pattern进行格式指定
7.@RequestBody(标注在标注在接受请求的方法的参数后面 )
一般用在处理POST的请求中请求体内的JSON数据 将其转换为对象接收
8.@PathVariable(标注在标注在接受请求的方法的参数前面,用于处理路径传参)
9.@RequestParam(请求参数有多个时用这个指定接收参数,标注在标注在接受请求的方法的参数前面 )
用集合接受前端传过来的参数组合需要这个号注解
- name 属性对应请求参数的一个属性 将其赋值给处理方法的一个参数
- defaultValue属性 当参数为非必传参数且前端没有传入参数时,指定一个默认值
- required属性 前端传入的参数是否为非必须参数 默认为true
10. @RestControllerAdvice(标注在类上,声明当前类是一个用于专门处理异常的类)
11. @ExceptionHandler(标注在方法上,声明当前方法可以处理哪些异常)
SpringBoot注解
1.@SpringBootApplication(SpringBoot核心注解,标注在SpringBoot启动类上)
2. @ConfigurationProperties(标注在Bean对象上 用于将配置文件中的属性值批量注入到某个Bean对象的多个对应属性中)
3.@SpringBootTest(标注在测试类上 测试类必须在SpringBoot的启动类所在的包之下)
4.@MapperScan(标注在SpringBoot启动类上 扫描Mapper)
5.@ServletComponentScan(标注在SpringBoot类上 开启过滤器支持)