SpringAOP-1.初探SpringAOP

想对spring的AOP原理做一些深入了解,就先做了一些aop配置,从应用层面对切面有所感知。

基本概念:

1.Joinpoint(连接点):连接点就是你要拦截的点, spring只支持方法类型的连接点。所以连接点实际中就是某一个业务类的方法。

2.Pointcut(切入点):切入点是一种“位置”定义,是对连接点的描述,把一或多个连接点定义为一个切入点。

3.Advice(通知):切面中定义的一些方法,称为“通知”。

4.Aspect(切面): 是切入点和通知的组合,在哪些位置去做切入,并做反应。

5.Proxy(代理) :一个类被 AOP 织入增强后,就产生一个结果代理类
 

AOP有四种实现方式:手动方式,半自动方式,全自动方式,注解方式

写了一个demo来理解切入的流程:

定义通知类:

public class LogTest {

  private Logger logger = Logger.getLogger(LogTest.class);
 public void before() {
        logger.info("这是LogTest类的before方法!");
    }
    /**后置增强方法*/
    public void afterReturn() {
        logger.info("这是LogTest类的afterReturn方法!");
    }
    /**后置异常增强方法*/
    public void afterException() {
        logger.info("这是LogTest类的afterException方法!");
    }
    /**最终增强方法*/
    public void after() {
        logger.info("这是LogTest类的after方法!");
    }
    /**环绕增强方法*/
    public void around(ProceedingJoinPoint jp) {
        logger.info("这是MyLogger类的around方法!");
    }
}

连接点的bean:

public class AutoConfigService {

  private Logger logger = Logger.getLogger(AutoConfigService.class);
   public void add() {
        logger.info("这是AutoConfigService类的add方法!");
    }
 
}

现在在beans

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context-3.2.xsd
						http://www.springframework.org/schema/tx
						http://www.springframework.org/schema/tx/spring-tx-3.2.xsd" default-autowire="byName">

    <aop:config>
        <aop:pointcut expression="execution(* com.cainiao.arrow.autoconfig. add(..))" id="pointcut"/>
        <aop:aspect ref="LogTest">
            <aop:before method="before" pointcut-ref="pointcut"/>
            <aop:around method="around" pointcut-ref="pointcut"/>
            <aop:after-returning method="afterReturn" pointcut-ref="pointcut"/>
            <aop:after-throwing method="afterException" pointcut-ref="pointcut"/>
            <aop:around method="around" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>
</beans>

执行之后,按照预期的流程执行:

这是LogTest类的before方法!

这是AutoConfigService类的add方法!

这是LogTest类的after方法!

场景:

1.日志类文件

  其实并不局限于日志类,像项目里一些场景,很多servide的方法finally都会做相同的收集操作,这些方法就可以横向切出来

2.事务管理 

调用方法前开启事务, 调用方法后提交关闭事务

3.缓存优化 

 第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回

4.监控时间

 一些中间件arsas之类可以做的更好,可以在本地测局部代码的时候用。

5.权限控制 

 总结:

(1)aop是一个很好的实用工具,项目中有很多点可以通过切面优化

(2)aop的实现需要进一步解读源码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值