博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring源码深度解析:学习笔记
阅读量:5873 次
发布时间:2019-06-19

本文共 2330 字,大约阅读时间需要 7 分钟。

hot3.png

一、AOP:

         补充:

                使用Spring AOP,要成功运行起代码,只用Spring提供给开发者的jar包是不够的,需要额外上网下载两个jar包:

                    1、aopalliance.jar

                    2、aspectjweaver.jar

网上看到一个写的很好的博客,博文地址:;

二、AOP核心概念

1、横切关注点

对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

2、切面(aspect)

类是对物体特征的抽象,切面就是对横切关注点的抽象

3、连接点(joinpoint)

被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

4、切入点(pointcut)

对连接点进行拦截的定义

5、通知(advice)

所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

6、目标对象

代理的目标对象

7、织入(weave)

将切面应用到目标对象并导致代理对象创建的过程

8、引入(introduction)

在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。

三、代码演示:

       1、 准备bean:

                

package cn.lsp.bean;/** * @author lisp * @ClassName TestBean * @Date 2019/5/22 12:18 */public class TestBean {   private String testStr = "testStr";   public String getTestStr() {      return testStr;   }   public void setTestStr(String testStr) {      this.testStr = testStr;   }   public void test() {      System.out.println("test");   }}

    2、切面类

        

package cn.lsp.bean;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.context.annotation.EnableAspectJAutoProxy;/** * @author lisp * @ClassName AspectJTest * @Date 2019/5/22 12:20 */@Aspectpublic class AspectJTest {   @Pointcut("execution(* *.test(..))")   public void test(){   }   @Before("test()")   public void beforeTest(){      System.out.println("beforeTest");   }   @After("test()")   public void afterTest(){      System.out.println("afterTest");   }   @Around("test()")   public Object arountTest(ProceedingJoinPoint p) {      System.out.println("before1");      Object object = null;      try {         object = p.proceed();      } catch (Throwable throwable) {         throwable.printStackTrace();      }      System.out.println("after1");      return object;   }}

    3、配置文件  application-context.xml

            

    

    4、启动测试类

        

package cn.lsp.bean;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @author lisp * @ClassName AspecTest * @Date 2019/5/23 8:55 */public class AspecTest {   public static void main(String[] args) {      ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");      TestBean testBean = (TestBean) applicationContext.getBean("test");      testBean.test();   }}

 

 

转载于:https://my.oschina.net/u/3211737/blog/3052923

你可能感兴趣的文章
Ruby的case语句
查看>>
Linux的链接文件-ln命令
查看>>
maven的tomcat插件如何进行debug调试
查看>>
table表头固定
查看>>
截取字符串中两个字符串中的字符串
查看>>
spring xml properties split with comma for list
查看>>
判断点是否在三角形内
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
查看>>
在odl中怎样实现rpc
查看>>
leetcode 110 Balanced Binary Tree
查看>>
python活用isdigit方法显示系统进程
查看>>
项目开发总结
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
apt-get 命令加 autoclean clean autoremove 区别
查看>>
Docs-->.NET-->API reference-->System.Web.UI.WebControls-->Repeater
查看>>
发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
查看>>
Ubuntu ctrl+alt会导致窗口还原的问题
查看>>
第四十期百度技术沙龙笔记整理
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>