@Configuration
标记当前类为配置类
@Bean
告诉Spring容器,当前方法的名称,为Map中的key
返回值是Map中的value
常规条件下,Spring通过反射实例化对象
也可以由用户自己new的方式创建
@ComponentScan("路径")
包扫描,让Spring注解生效
@Scope("singleton")
单例模式,默认为单例模式
@Scope("prototype")
多例模式
@Lazy
懒加载,需要配合@Scope使用
@Component
类似@Bean注解,将类交给Spring容器管理
@PostConstruct
标识初始化方法
@PreDestroy
标识销毁方法
@Autowired
自动注入
@PropertySource(value="class:/文件名",encoding="UTF-8")
指定配置文件
@Value(数据)/@Value(${文件中的Key})
动态赋值
@PropertySource
加载指定路径的配置文件properties
@Aspect
标识当前类是一个切面
@Pointcut
标识切入点表达式
切入点表达式
*号是通配符,表示任意
bean标签
bean("对象的ID")只能匹配固定的类/对象一个 粗粒度
within表达式
within(包名.类名)可以匹配多个类 粗粒度
execution表达式 细粒度
@Pointcut("execution(* com.*..*(..))")
匹配com包下任意类任意方法任意参数 任意返回值的方法
execution(返回值类型 包名.类名.方法名(参数列表))
@annotation
@Pointcut("annotation(路径.注解)")
使用注解拦截
@Before前置通知
在执行方法前执行
@AfterReturning后置通知
在执行方法后执行
@After
最终通知 基本不用
不管目标方法执行是否正确,都要执行(类似try-catch中的finally)
@AfterThrowing
异常通知
目标方法执行时,抛出异常
@Around
环绕通知(类似包括前置通知后置通知的整合)
环绕通知必须提供参数,并且必须位于通知的第一位
前四大通知类型不能控制目标方法的运行,一般记录程序的运行状态
在目标方法执行前后都要运行,只有环绕通知才可以控制目标方法运行,使用最多的通知方法
@EnableAspectJAutoProxy
让AOP生效,写在配置类中
可以添加属性(proxyTargetClass=true)让代理默认为CGLib代理,不建议使用默认为jdk代理,因为不是所有类都有接口。
@Order(value=数字)
给切面类排序,数字越小,越先执行
关于JoinPoint和ProceedingJoinPoint区别
说明:
1.ProceedingJoinPoint只适用于环绕通知,因为只有环绕通知,才能控制目标方法的运行.
2.JoinPoint 适用于其它的四大通知类型,可以用来记录运行的数据.
3. ProceedingJoinPoint 中有特殊的方法proceed();
4. 如果使用"JoinPoint" 则必须位于参数的第一位
@RequetMapping("/路径")
负责用户的路径请求与后台服务器之间的映射关系
如果请求路径不匹配,则用户报错404
@ResponseBody
作用:讲服务器的返回值转化为JSON串,如果服务器返回的是String类型,则按照自身返回
@RestController
@Controller+@ResponseBody
@PathVariable
restFul结构,接收参数的注解
@RequestMapping(path = "/login", method=RequestMethod.GET)
path指定路径,method可以标识方法,有的公司不使用GetMapping等
@PostMapping("")
新增:post请求类型
@DeleteMapping("")
删除:delete请求类型
@PutMapping("")
修改:put请求类型
@GetMapping("")
查询:get请求类型
@CrossOrigin
允许跨域
- GET/DELETE 参数提交的方式一致
- POST/PUT 参数提交的方式一致
- restFul结构适用于所有的请求类型
@Data
//自动生成Getter,Setter,RequiredArgsConstructor(可以理解为无参构造),toString,EqualsAndHashCode,Value方法
@NoArgsConstructor
//无参构造
@AllArgsConstructor
//全参构造
@Accessors(chain = true)
//开启链式加载
@Mapper
1.将接口交给Mybatis管理,之后将mybatis交给spring管理
2.动态代理机制 为接口创建代理对象 Map(userMapper,代理对象)
3.接口和实现类,所有的sql写到映射文件中
@SpringBootTest
标记类为SpringBoot测试类,只启动Spring容器不启动服务器
@Param
Mybatis中不允许直接传递多个数据,如果多值需要转化为“单值”
1.将多值数据转化为POJO对象
2.将多汁数据转化为Map集合,Mybatis为转化Map集合提供了注解@Param
例如:
需要传递两个参数
引号中的字段为map中的key,后面的值就是map中的value
@Param
Mybatis中将参数封装为Map集合 在给xml中传参时多个值想要封装到统一个map中除了写map集合外,也可以在传参时写上@Param注解
例如:List<User> findUserList( @Param("query") String query,@Param("size") int size,@Param("startNum") int startNum);
引号中间的为Map中的key,传过来的值为value
@Alias
Mybatis定义对象的别名 @Alias("别名")
@MapperScan("mapper接口路径")
写在spring的主启动类,包扫描,可以不用在mapper接口上写@Mapper注解,给扫描路径中的接口默认识别为Mapper
Mybatis注解sql
@Select("select * from 表名")
@Insert("sql")
@Update("sql")
@Delete("sql")
@Transactional
Spring中用来控制事务,增删改需要添加事务,查不会对数据进行更改。
@RestControllerAdvice
Controller层中的全局异常处理 因为调用规则,最后报错都会返回到Controller层使用在Controller添加全局异常捕获就好
@ExceptionHandler(RuntimeException.class)
使全局异常处理生效,捕获运行时异常
需要传参,最大异常Exception exception
exception.printStackTrace()打印异常
@TableName("表名")
MybatisPlus注解
POJO与数据表进行绑定 一一对应
@TableId(type = IdType.AUTO)
MybatisPlus注解 标识主键自增
@TableFieId("字段")/(exist = false)
与字段进行绑定,如果名称一样就可以省略,如果在yml文件中配置了驼峰规则,也可以省略该注解/标识属性是否存在,以及名称是否一致