Spring总结

来源:互联网 发布:数据库简答题 编辑:程序博客网 时间:2024/06/07 16:15

什么是spring的ioc?

Ioc就是所谓的控制反转,指的是将spring的创建销毁都交给spring来管理,控制权就是对象的创建与销毁,反转就是交给spring

 

什么是di,依赖注入?

如果A类需要使用B类,我们可以认为A类要依赖于B类,这时候我们把A类和B类同时交给sprig来创建,将B类由spring依赖注入到A类里面

注入的方式?

Setter

Set方法

构造器

注解的方式,(前提是A类、B类都要交给spring来管理,否则无法注入)

 

什么是aop?

Aop是面向切面编程,spring对aop的支持有四种方法

最常用的是aspect方式

面向切面编程就是横跨多个类的关注点的模块化,换句话说,就是我们在多个类,这个类里面有一些公共的方法,比如说都以add开头,这些方法在执行前和执行后,我们要执行另一些操作,针对这些场景我们可以使用aop,所以我们这些方法一般叫做连接点,匹配这些连接点我们叫做切点,切点的行为就是通知,用来描述切点的这个类就是切面;

所以我们首先要定义一个切面类,切面类里面要有切点,要有通知,当某个连接点时,切点表达式去匹配那个切点,然后根据对应的通知去执行

 

哪些地方用到了aop?

日志

一般controller层会有一个注解,比如增删改除了查询,所有的方法加一个注解,在操作这些方法的时候,它对应的操作会记录下来;比如说一个用户要来新增,新增上面要注解一下,然后这个新增方法会被拦截,拦截之后会获取对应的请求ip还有时间,当前用户,把这些信息记录起来插到数据库里

我们在service层还会拦截一次,这时候拦截就表现在两方面:比如说它新增了一个用户,新增了哪些信息,有必要把它记录起来,他修改哪些信息我们在service层要把它抓取,其次,我们的service层去访问我们的持久层,结果出错了连不上,抛出异常,针对这种情况我们也需要把它记录下来

所以我们的日志要在service层还有我们的controller层都要拦截。Controller主要拦截用户的操作,什么时候,哪一个用户ip做了什么操作;而我们的service层主要记录一些日志,新增修改删除那些数据,如果抛出异常,要将这些信息记录下来

缓存

Redis缓存就是用aop做的,我们用的环绕通知,比如我们新增的方法上面加一个注解,这个注解用来拦截所有的新增请求,新增的时候先存到缓存里面,再新增到数据库里面,查询的时候,注解一下,先从缓存里面查,如果没有再去数据库里面查,查出来再放到缓存里面,再返回去,如果缓存里面有再去做

怎么保证数据库与缓存的一致性?

这块不是我负责的,但是我可以尝试说说

我们有个定时任务,每到晚上12点会定时刷新一次

如果我们觉得数据库差异太大我们会手动刷新一次,这一点不好处就是刷新的时候用户不能访问,如果访问的时候数据是有问题的,要先清空缓存再刷,所以维护起来会选一个时间段

实际上要根据业务情况,

可以把它存到redis中,首先要保证第一次要写到redis里(可能代码量大)

权限

已经实现好的,让我们自己去实现权限的话好像也没有什么可做的了

Secret、shiro、注解到某一个方法上可以认为这个方法加一个权限

原创粉丝点击