深入浅出springboot阅读学习(一)

一、基础知识
1、swagger中的配置文件,是用来配置swagger页面样式的,比如抬头啥的,注意扫描路径,启动类上要加@EnableSwagger2,当然不配置的话也可以使用默认样式。
2、当Service接口层存在多个实现类的时候,可以通过@Primary指定优先生效的实现类也可以使用@Quelifier在注入的时候指定注入实现类的名称,名称在实现类上加注解的时候,通过@Service("名称")来声明
3、springbean的初始化流程,首先是通过@ComponentScan定义的扫描路径扫描带有@Component的类(@Component是通用的bean基础声明注解,像是@Controller@Service@Repository都包含它,并且进行了功能扩展),扫描完保存扫描到的bean定义,中然后IOC容器装载其定义然后再创建实例最后我们就可以通过@Autowired进行注入使用了
4、pom依赖相关,spring-boot-configuration-processor这个依赖是springboot中基本的依赖,其作用是可以使我们直接在配置文件进行配置就可以自动读取,然后也可以通过@Value("${database.username}")这种方式取值
5、条件装配bean,所谓条件状态举个例子我们的服务在启动时候装配bean比如装配数据库,如果我们数据库配置不全导致装配出现问题,服务无法启动,但是实际我们并不会因为配置错误导致启动失败,这个是因为其引用了条件装配注解@Conditional加上这个注解就会首先检查我们配置的数据库配置信息读取其上下文如果检查没有问题再进行装配,不会影响服务启动。
6、Bean的作用域,singleton 默认值,IOC容器默认存在单例;prototype原型模式每从IOC容器取出一个Bean就创建一个新的,其具体应用样例可以参考https://blog.csdn.net/unifirst/article/details/50482031?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-6.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-6.channel_param
7、SpringAOP,拦截器里面的方法,before()/around()注:around分为beforearound和afteraround/after()/afterReturning()/afterThrowing()/useAround(),顾名思义,正常执行逻辑是before,beforearound,around,afteraround,after,afterReturning;如果出现异常则afteraround不会执行然后是after,afterThrowing。这当中实现代理的核心类是ProxyBean通过getProxyBean生成新的impl实例对象,这时就已经是拼装了自己实现的拦截类的实例对象了。在真正执行的时候进入我们的拦截代理类时,里面的Inteceptor类会用其proceed以反射的形式调用原有方法,类似于在真正的方法前后进行扩展。并且对于是否使用扩展是通过useAround()控制的如果true则走代理false则直接只调用原有方法不拦截。AOP说白了就是按照一定的约定通过代理技术,把我们自定义的方法织入约定的流程当中,这就是AOP的本质。AOP最为典型的应用就是数据库事务的管控,在我们执行完CRUD语句后执行connect.commit()或者connect.rollback(),紧跟的 COMMIT / ROLLBACK 都是用在执行 DML语句(INSERT / DELETE / UPDATE / SELECT )之后的。DML 语句,执行完之后,处理的数据,都会放在回滚段中(除了 SELECT 语句),等待用户进行提交(COMMIT)或者回滚 (ROLLBACK),当用户执行 COMMIT / ROLLBACK后,放在回滚段中的数据就会被删除。包括springboot中@Transactional注解的应用都是AOP。AOP中的几个概念:连接点,指的是具体被拦截对象,一般就是被拦截的方法。切点,我们一般拦截的不仅仅是单个方法也可能是多个类的多个方法可以通过正则和指示器去定义从而适配切点就是提供这个匹配功能的。通知,通知就是我们上面的哪些自定义方法前置通知、后置通知、环绕通知、事后返回通知、事后异常通知。目标对象,被代理对象上面的例子中就是那个getproxybean方法代理后生成的impl类对象。切面,是一个可以定义切点、各类通知和引入内容的,SpringAOP通过他来增强Bean的功能或者织入对应流程,这也是我们真正开发AOP的地方;AOP开发:1.自定义一个类,类上加@Aspect注解来声明其为切面类。2.在类里面定义方法分别对应before()、after()等方法上面分别搭上对应@Before/@AfterReturning等注解,注解里面声明连接点举例@After("execution(*com.springboot.test.impl.UserServiceImpl.printUser(..))")   在方法上打上这样一个注解,这样我们每个方法上都需要编写execution的一串内容,我们也可以通过定义一个切点的方法,将切点上写上上面的连接点内容,然后方法上直接引入切点就可以,定义切点@PointCut("execution同上")下面定义通知方法的时候@After("pointCut()"),这里的pointCut()就是上面@PointCut注解标识的方法。下面我们来解释下上面execution那一串的含义,这个就是上面基础概念中的切点,execution标识执行时候拦截里面正则匹配的方法,*标识任意返回类型,com.springboot.test.impl.UserServiceImpl标识目标对象的全局限定名称就是目标对象,printUser目标对象的方法,对应连接点,(..)标识任意参数进行匹配。其实除了上面的定义方法也还可以通过AspectJ指示器来匹配。这里强调下执行顺序吧,不出异常before,around before,hello zhangsan,around after,after,afterReturning;出异常 before,around after,after,afterThrowing 总之可以看到after一定执行并且在afterReturning、afterThrowing之前。SpringAOP实现validator方法首先我们定义一个接口,接口里有个validatorUser方法,我们用impl类实现这个方法然后在我们的切面上通过@DecaareParents注解其中value属性标识需要被增强功能的目标对象,defaultImpl声明编写增强功能的类,就是我们上面的validator实现类使用的时候直接将原有接口强转为validatorUser接口实现扩展功能。多个切面,定义多个切面跟定义一个切面没什么区别注意要将切面实例化@Bean然后如果我们不做控制切面的执行顺序也是无序的,要想控制执行顺序我们可以通过@Order(1),这里的1用于区分权重,数值越大越贴近执行方法,这个所谓的贴近,举个例子,我们定义了三个切面1,切面2,切面3,他们对应的order值分别是123,执行log打印是myAspect1 before,myAspect2 before,myAspect3 before,测试方法,myAspect3 after,myAspect3 afterRuturning,myAspect2 after,myAspect2 afterReturning,myAspect1 after,myAspect1 afterReturning。也可以通过实现Orderd接口实现顺序控制,不如@Order注解编写简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值