Spring AOP

零、AOP

面向切面编程。把多个模块具有相同实现细节的功能提取出来作为一个切面(目的是实现复用),实现切面和业务逻辑的分离(优势)。

1.为什么不用继承或者委托?

继承可能导致不好的对象体系:继承表示is-a关系,使用继承复用通用功能可能导致尴尬的子父类关系。使用委托可能需要委托对象进行复杂的调用。

2.Spring AOP

  • 构建在动态代理基础之上,所以Spring对AOP的支持局限于方法拦截
  • Spring在运行时才创建代理对象。

3.Spring中AOP如何实现?

  • Spring AOP封装了
    • JDK动态代理(优先):基于接口(代理类和被代理类需要实现一个相同接口)
    • CGLIB代理:可对任意类进行代理(基于继承,所以被代理类不能被final修饰;基于实现)

一、AOP相关名词解释

1.Target:目标对象,被代理的对象

2.JoinPoint:连接点,目标对象中可被增强的方法

3.PointCut:切入点,目标对象中已被增强的方法

4.Advice:增强or通知,增强的代码

5.Weaving:织入,将Advice应用到PointCut的过程

6.Proxy:代理,将Advice织入目标对象后,形成的代理对象

7.Aspect:切面,即切入点+通知

二、Spring AOP使用

注解方式

@Aspect //切面
@Component //POJO,交给Spring管理
public class LoggerAspect {
    private final Logger log= LoggerFactory.getLogger(LoggerAspect.class);

    //xiang方法是一个标识方法,代表可重用切入点表达式
    @Pointcut("execution(* com.xiang.*.*.*(..))")
    public void xiang(){};
    @Before("xiang()")
    public void beforeMethod(JoinPoint joinPoint){
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if(requestAttributes!=null){
            HttpServletRequest request = requestAttributes.getRequest();
            //打印请求内容
            log.info("===============请求内容Start===============");
            log.info("请求地址:"+request.getRequestURL().toString());
            log.info("请求方式:"+request.getMethod());
            log.info("请求类方法:"+joinPoint.getSignature());
            log.info("请求类方法参数:"+ Arrays.toString(joinPoint.getArgs()));
            log.info("请求时间:"+ String.format("%tc",new Date()));
            log.info("===============请求内容End===============");
        }
    }
}

注:

execution(* cglibproxy.Student.*(..))表示对Student对象的public的,返回值类型不限的,方法名不限的,参数不限的 方法进行增强。
全部评论

相关推荐

头像
10-22 20:13
中南大学 Java
序言大家好呀。我是希晨er,一个初入职场的程序猿小登最近上班摸鱼刷到了一篇文章:10年深漂,放弃高薪,回长沙一年有感,还有聊聊30岁大龄程序员过往的心路历程,突然就有点感慨。我如今也做出了和大明哥一样的抉择,只是更早。此外我22年的人生,好像从来没好好记录过。正好现在工作不太忙,就想把这些经历写下来,也希望能得到社区里各位前辈的指点个人背景我是03年出生的西安娃,父母都是普通打工人。刚从中南大学软件工程专业毕业半年,现在在老家的央企过着躺平摆烂的日子成长轨迹从农村到城市的童年我家并不是西安的,只是爸妈在西安上班,从小学之后就把我接到了西安。后来老家房子拆了,爷爷奶奶也搬了过来。农村的生活,我觉...
Yki_:看哭了,恋爱那一段你女朋友说你不够关心她,可你毕竟也愿意遇到矛盾写几千字来和她慢慢分析;说不愿意给她花钱,我感觉可能只是消费观不一样;如果她想留在长沙,也应该提前跟你说开。不过她也许会心疼你放弃大厂offer转向数字马力?我也因为同样的原因有过一段幸福而充满遗憾的感情,不过跟爱情相比确实前途更重要一点。至于offer的选择,换我我也会这么选。把这些旧事记录下来以后,接下来就好好向前看吧,加油兄弟
🍊晨光随笔
点赞 评论 收藏
分享
点赞 评论 收藏
分享
09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务