切面

MyBatis+Spring+SpringMVC框架面试题整理(二)

╄→尐↘猪︶ㄣ 提交于 2019-12-09 01:54:30
目录 ■ Spring 能帮我们做什么 ■ 描述一下 Spring 的事务 ■ 什么是 Spring IOC 容器,IOC 的优点是什么? ■ 什么是 Spring 的依赖注入 ,注入方式有哪些? ■ Spring 支持的几种 bean 的作用域 ■​​​​​​​ 简单解释一下 spring 的 AOP ■​​​​​​​ Mybatis 中#和$的区别? ■​​​​​​​ Mybatis 的使用步骤是什么样的? ■​​​​​​​ 使用 MyBatis 的 mapper 接口调用时有哪些要求 ■​​​​​​​ mybatis的缓存机制,一级,二级介绍一下 ■​​​​​​​ 视图解析器本质是什么 ■​​​​​​​ 统一解决get乱码 ■​​​​​​​ Spring 能帮我们做什么 1. 实例化bean,并且管理bean与bean之间的依赖关系 2. Spring面向切面编程能帮助我们 无耦合实现日志记录,性能统计,安全控制 等功能 3. Spring能非常简单的帮我们 管理数据库事务 4. Spring提供了与第三方框架无缝集成,如: 第三方 数据访问框架 (mybatis,hibernate,jpa),自身提供了JDBC访问; 第三方 web 框架 (struts,jsf),自己提供了spring mvc进行web创建; 其他第三方框架(如:java mail,任务调度,缓存框架等)

Spring-AOP源码分析随手记(一)

心已入冬 提交于 2019-12-08 14:58:27
1.@EnableAspectJAutoProxy(proxyTargetClass = true) 就是弄了个"org.springframework.aop.config.internalAutoProxyCreator"::AnnotationAwareAspectJAutoProxyCreator.class的Bean到容器中 2.分析AnnotationAwareAspectJAutoProxyCreator.class类结构 得出了哪些是重要的几个。 3.查看AnnotationAwareAspectJAutoProxyCreator源码 =》查看父类AbstractAutoProxyCreator,有setBeanFactory等等各种继承来的方法 4.又是一顿整理得出了一个图(???)如下 pic1->AOP功能代码分析图 5.分析AbstractAutoProxyCreator。 setBeanFactory有个O标志被重写了,打开,有个initBeanFactory方法,打开,创建了个advisorRetrievalHelper切面工具,又是O重写 创建了aspectJAdvisorsBuilder 6.pic1图里明显看出有两个关键性方法:

Spring项目二-AOP

丶灬走出姿态 提交于 2019-12-07 04:49:06
Spring AOP概念: AOP:Aspect Oriented Program ---------面向切面编程。 功能:核心业务功能(如登录,增删数据等)和周边功能(日志等),周边功能在Spring的面向切面编程的AOP思想里,被定义为切面。 核心业务和切面功能分别独立开发,然后有选择性的把切面功能和核心业务功能“编织”在一起,这就是AOP。 AOP项目 - 项目设计 核心功能:ProductService和ProductService1 辅助功能:日志输出,性能统计 - 项目开始 1,**就像一般的Java类,编写核心功能类。 public class ProductService { public void doSomeService(){ System.out.println("doSomeService"); } public void doCheck(){ System.out.println("Do check"); } } 2,准备日志和性能统计切面** 例如日志切面: 示例代码如下: public class LoggerAspect { public Object log(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("start log:" + joinPoint

从零开始写Hystrix

我的未来我决定 提交于 2019-12-06 22:13:36
1、springboot+自定义注解实现灵活的切面配置 利用aop我们可以实现业务代码与系统级服务例如日志记录、事务及安全相关业务的解耦,使我们的业务代码更加干净整洁。 首先创建一个springboot项目,并编写控制器 package com.fanghao.web;@RestController public class SampleController { @RequestMapping("/test11") public int test11(String deviceId) { return 11; } @RequestMapping("/testGG") public String testGG(String deviceId) { return "testGG 切面测试!"; } } 编写切面类,并配置切面 @Aspect @Component public class TestAspect { @Pointcut("execution(public * com.fanghao.web.SampleController.test*(..))") public void addAdvice(){} @Around("addAdvice()") public Object Interceptor(ProceedingJoinPoint pjp){ Object

apolloxlua include函数

寵の児 提交于 2019-12-06 21:34:46
include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示。 include 对应的是 AOP 切面编程的模式。我们可以把切面的代码,组织在后缀为.apo的文档里, 并且使用include在多个文档里共享。其他后缀格式 目前不支持。当然你也可以把你的切面代码组织在你的主文档里,这个是没有差别的, 但是在交织的时候切面的代码并不会对著文档代码产生影响, 能 影响到的是你的文档的可维护性, 所以我们需要把切面的代码独立到一个实体文件中,这其实是切面模型和其他模型相互组合的一点。 目前apolloxlua可以直接交织和注解切面代码,因为对源代码的理解,所以在交织的时候我们只需要关注我们的切面过程和业务是否契合,其余的一切apolloxlua自动处理。 如果你使用的开发模型,并不需要类似切面的方式,那么你不需要关心这个处理。 正常导入其他模块或者包的使用方式是使用 require 方式。 使用方式: include ("path"); 使用示例: ` include ("./build/test.aop"); var m = require ("module"); function a () { var c = 0; ;[BREAKPOINT

Cache Plugin 实现过程

元气小坏坏 提交于 2019-12-06 19:44:44
本文是《 轻量级 Java Web 框架架构设计 》的系列博文。 前几天写过一篇文章,关于如何实现 Cache Plugin,错过的朋友可以看这篇:《 能否让 Cache 变得更加优雅? 》。 今天,我想和大家分享一下这个 Cache Plugin 的实现过程。再次感谢 Bieber 的解决方案! 我觉得 Cache 应该是一种带有 AOP 性质的 Plugin,类似地,还会有 Log Plugin、Permission Plugin 等。不妨先对这些 AOP Plugin 做一个通用的解决方案,或许以后实现其他同类型的 Plugin 会更加轻松。 我们知道 AOP 内部其实使用了 Proxy,在 Smart 中已经对 AOP 做了一个改进,现在是具有 Proxy Chain 风格的 AOP 了,也就是说,AOP 就像 Chain 一样可以进行链式调用。对于这个思路还不太清楚的朋友,可以参考这篇:《 使用“链式代理”实现 AOP 》。再次感谢 黎明伟 提供的解决方案! 由此可见,首先需要对 Proxy 做一个扩展,比如增加一个 PluginAspect(与以前的 BaseAspect 同等级别),然后在 Cache Plugin 中去扩展这个 PluginAspect。此外,还需要对 AOP Aspect 的加载部位做一个手术,给它开一个口子,让 PluginAspect

spring AOP

雨燕双飞 提交于 2019-12-06 16:04:19
------------------------------------ 剩下的时间不多了,抓经做自己想做的吧 AOP: 专业术语叫做面向切面的编程 为什么要使用aop : 为了简化代码, 将相同代码抽离处理, 然后在再使用所谓切面, 将这些功能加入进去 将这个抽离出来的功能叫做 advice(增强方法)(在什么地方干什么事情) , 问题来了:这个advice 我应该放在类的哪些地方呢? 答: 在类的方法的前后,或者异常的抛出点,你都可以将这些advice 放在这些地方 上面这些可供advice 存放的地方,就叫做 “ 引 入点” 。 现在我将advice 插入到 某一个“引入点”, 那么这个“引入点” 就叫做 “插入点” 所以 “引入点” 和 “插入点” 之间是不同时期的同一个东西的叫法, 在没有引入advice 的时候这个叫做 “引入点” 引入“advice” 的时候, 这个叫做 “插入点”; 那现在上面确定, 在某一个具体的地方 “插入点” , 在什么时候干什么事情(advice) , 这个就被专业人士定义为“切面”。 白话描述 “切面” : 我现在手握增强剂, 我在 你睡觉前给你打, 这个就叫切面, 就是 你在什么地方,什么时间,干什么事情。、 那么现在我如何使用这个切面, 而且还是在不改变原有类的基础上,让整个程序不知道的基础悄悄的就给你进行了加强处理? 答:

2、Spring-AOP

放肆的年华 提交于 2019-12-06 10:58:57
1、面向切面编程AOP   AOP:解耦,一组类共享相同的行为   Spring只支持方法拦截的AOP,即拦截发最小粒度为类中方法   术语:   切面Aspect:在一个什么样的环境中工作,动态代理中可以理解为一个拦截器   通知Advice:切面的方法,类比拦截器中的方法     前置通知before     后置通知after     返回通知afterReturning     异常通知afterThrowing     环绕通知around   引入Introduction:在现有的类里添加自定义类和方法   切点Pointcut:限定什么时候启动拦截并织入对应的流程中   连接点join point:具体要拦截的东西,可以通过切点的正则表达式去判断哪些方法是连接点   织入Weaving:生成代理对象并将切面内容放入到流程中的过程     Spring是以JDK的CGLIB动态代理来生成代理对象 2、AspectJ注解式切面编程   基于注解拦截   基于方法规则拦截 3、AspectJ注解   @EnableAspectJAutoProxy:开启Spring对AspectJ的支持,注意,该注解是放在配置类上的   @Aspect:声明是一个切面   @PointCut:声明切点   通知类型:   @Before:前置通知,被代理对象的方法前调用   @After

Spring

我是研究僧i 提交于 2019-12-06 08:25:29
一·概念   一个轻量级的控制反转和面向切面编程的容器框架 二·使用spring的 好处   1.轻量级,2.控制反转,3.面向切面编程,4.作为一个容器框架,可以继承各种优秀的框架,5.事务的管理,6.解耦,简化开发 三·Spring的两大核心   1.面向切面编程(AOP)   AOP,面向切面编程,可以说是对面向对象编程(OOP)的一个补充。在OOP中中引入了封装,继承和多态的概念来建立一个对象的层次结构。OOP允许定义从上到下的一个关系,但是定义左右就显得无能为力。如:日志,事务等功能。因为日志代码水平的而分散在所有对象层次中,但是它与散布到对象的核心功能不存在关系。如果持续使用OOP就会产生大量的重复代码,不利于模块的重用。但是AOP解决了这种情况,它利用一种横切的技术,剖开封装的对象内部,把一些与核心功能无关且常出现到各个对象中的功能单独封装出来。以便于减少代码的重复,降低耦合度,以及提高可操作性和可维护性。   2.控制反转(IOC)   IOC,控制反转 ,简单来说就是复杂的系统看成简单的各个对象间相互合作,但是进行一个封装,内部的复杂实现对外是隐藏了的。 四·AOP的动态代理方式   1.JDK的动态代理   使用情况:目标对象的实现类实现了接口   实现方式:     Java.lang.reflect包中的InvocationHandler接口     

Spring笔记

时光毁灭记忆、已成空白 提交于 2019-12-06 04:19:57
Spring官网: https://spring.io/ spring概述 spring开源框架致力于J2EE各层的解决方案 Java创建对象的方式:new;从工厂取一个对象(工厂模式的应用);反射(按需分配); spring就是按需分配,当你需要的时候再给你,spring有一个bean容器,用于缓存Java对象 spring两大特性IOC、AOP之IOC(见son模块) IOC(控制反转) IOC是面向对象编程中的一种设计原则,即不手动创建对象,交给spring来管理整个对象的生命周期。控制反转最常见的方式是DI(依赖注入),这是spring框架的核心。 springIOC特性解决了对象创建的问题、依赖关系维护的问题。 ioc,Spring的这个bean工厂容器主要是利用反射技术按需分配缓存对象,管理对象,描述依赖,依赖注入。Spring的bean工厂容器的作用就是缓存对象。 依赖关系对象的赋值交给spring容器来完成。 定义一个bean,只用一种配置方式以注入容器 -> xml配置或注解,自己写的class一般使用注解。而注入第三方对象写xml的bean。 spring两大特性IOC、AOP之AOP(见son2模块) AOP(面向切面编程) AOP基于IOC,AOP是对OOP的补充,但和OOP不冲突,这使代码内聚性更高。 AOP可以使软件各层耦合度降低,AOP有特定应用场景