new 对象是一个耗时的过程,
spring 是一个资源整合框架。
由此注解(@SpringBootApplication)描述的类为springBoot项目的启动入口类
@Autowired has a 关系 Dao–Controller
Dependent lookup
Component默认是单例的
@Scope(“prototype”)设为多例
带此注解的类看为组件,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化
这个值可能作为逻辑组件(即类)的名称,在自动扫描的时候转化为spring bean,即相当中的id
//作用1。将对象转换为JSON 2.如果返回值是String类型,则返回字符串本身 3.一般客户端发起ajax请求时,采用该注解返回数据,将不会执行试图解析操作
//方法返回值为对象(不包字符串,直接量如Long id),spring mvc 可以将其转换为JSON格式的字符串
//spring mvc 框架底层默认会使用jackson API将对象转化为json格式的字符串
返回客户端数据 为JSON格式的字符串
JSON 属于一种数据结构 {“key1”:“value1”,“key2”:“value2”,…}
注解由mybatis框架定义,用于描述数据层接口对象,系统底层启动mybatis框架注解的描述,创建其接口实现类,并将实现类对象交给spring管理
扫描该包下的所有mapper类作为Mapper映射文件
mapper包多时使用
int deleteByIds(@Param(“ids”) Integer…ids );
用来传多个参数
给mybaties的数据起别名(传参时的别名字段)
对应数据库的表,如果不写默认是类名首字母小写作为表名,比Member,不写数据库表默认指向member
的属性name对应数据库表的字段,如果不写默认是驼峰下划线匹配,比如private Long myId,如果不写得话,就是对应数据库表字段my_id
把当前字段作为数据库主键使用,匹配数据库主键。如果不贴此注解,在某些查询语句的时候会把表字段一起作为联合主键查询
让通用mapper在执行insert操作之后将自动生成的主键值回写到当前实体对象对应的属性当中
此注解中定义的异常类型,为这个方法可以处理的异常类型, 它可以处理此 异常以及这个异常类型的子类类型的异常
rest风格(一种架构风格)的url 其语法结构{变量名}/{变量}
1.切入点(定义在哪些目标方法上进行功能扩展)
2.通知(封装功能扩展的业务逻辑 )
用于标识或者描述AOP中的切面类型,基于切面类型构建的对象用于为目标对象进行功能扩展或控制目标对象的执行。
1.bean 为一种切入点表达式类型
2.sysUserServiceImpl 为spring容器中的一个名字,并首字母小写
涵义:sysUserServiceImpl对象中的任意方法执行时,都由本切面对象的通知方法做功能增强
@Pointcut("bean(sysUserServiceImpl)")
public void doLogPointcut() {} //方法不写代码 ,只为注解提供环境
1.bean 用于匹配指定bean对象的所有方法
▪ bean(“userServiceImpl”)指定一个userServiceImpl类中所有方法。
▪ bean("*ServiceImpl")指定所有后缀为ServiceImpl的类中所有方法。
2.within 用于匹配指定包下所有类内的所有方法
▪ within(“aop.service.UserServiceImpl”)指定当前包中这个类内部的所有方法。
▪ within(“aop.service.") 指定当前目录下的所有类的所有方法。
▪ within("aop.service…”) 指定当前目录以及子目录中类的所有方法。
3.excution 用于按指定语法规则匹配到具体方法
语法:execution(返回值类型 包名.类名.方法名(参数列表))。
▪ execution(void aop.service.UserServiceImpl.addUser())匹配addUser方法。
▪ execution(void aop.service.PersonServiceImpl.addUser(String)) 方法参数必须为String的addUser方法。
▪ execution(* aop.service….(…)) 万能配置。
@annotation 用于匹配指定注解修饰的方法
▪ @annotation(anno.RequiredLog) 匹配有此注解描述的方法。
▪ @annotation(anno.RequiredCache) 匹配有此注解描述的方法。
用于描述切面中方法,这样的方法会被认为是一个环绕通知(核心业务方法执行之前和之后要执行的一个动作),@Aournd注解内部value属性的值为一个切入点表达式或者是切入点表达式的一个引用(这个引用为一个@PointCut注解描述的方法的方法名)。
* 1.1.方法的返回值为Object
* 1.2.方法参数为ProceedingJoinPoint类型 连接点类型,此类型的对象用于封装要执行的目标方法相关的一些信息。一般用于@Around注解描述的方法参数。
* 1.3.方法抛出异常为throwable
* 2.1.目标方法执行之前或之后都可以进行功能拓展
* 2.2.相对于其他通知优先级最高
* @param ProceedingJoinPoint 为一个连接对象(封装了正在执行的目标方法信息)
* @return 目标方法的返回值
* @throws Throwable
@Around("doLogPointcut()")
public Object around(ProceedingJoinPoint jp)throws Throwable{
log.info("method start {}",System.currentTimeMillis()); //开始
try {
Object result = jp.proceed();//最终会执行目标方法
log.info("method end {}",System.currentTimeMillis()); //结束
return result;
} catch (Throwable e) {
e.printStackTrace();
log.error("method error {}",System.currentTimeMillis()); //错误
throw e;
}
自定义注解:(使用@interface定义注解,默认所以注解都 继承 is a Annotation类型的对象)
@Target 注解用于告诉jdk我们自己写的注解描述的对象
@author MTA 注解用于告诉jdk我们自己写的注解何使有效
说明:所有的注解都是一种元素据(Menta Data)一种描述数据的数据(例如 使用注解描述类,描述方法,描述属性,描述方法参数等等)
当使用该注解表示所有方法都要进行事务控制,类上使用@Transactional注解用于定义方法上的事务共性,假如还有事务特性可以在对应的方法上继续使用@Transactional注解定义事务特性
@Transactional(readOnly = true) 之应用于查询方法
@Transactional(readOnly = false) 用于添加修改删除
rollbackFor = RuntimeException.class, 回滚
noRollbackFor = MyBatisSystemException.class)
rollbackFor = Throwable.class,
timeout = 10, 超时
isolation = Isolation.READ_COMMITTED) 事务特性 脏读 幻读 重复读
propagation = Propagation.REQUIRES_NEW) pa b gai seng
* 表示写日志的操作始终会运行在一个独立的事务中
此对象也会交给spring管理
1.此注解描述方法会交给spring管理
2.@Beean注解没有指定其value属性的值,则bean的名字默认为方法名
此方法在执行之前需要进行权限检测(负责这个过程的方法是一个通知方法),假如用户权限中包含 @RequiresPermissions 注解value属性指定的值,则授权访问,不包含则抛出异常
//动态的导入pro配置文件,交给spring容器进行加载
@PropertySource("classpath:/properties/redis.properties")
// :后 / 根目录是resources properties\redis.properties lunx中只有正斜杠
//spel(spring EL)表达式
//链式加载
User user = new User();
// user.getId();
user.setId(100)
.setName("ssss");
//主要告诉Mapper的包路经,会自动的完成包扫描
不用再每个DAO类上添加注解@Mapper
DAO类中再添加注解@Mapper 不会影响程序正常运行
//将表与对象 进行一一对应
//主键的信息 设定自增
//如果字段名称与属性的名称一致(包含驼峰规则映射),可以省略不写