Spring的AOP

AOP

(1)基本概念

 

1 AOP底层原理是动态代理

有两种情况

(1)有接口情况,使用JDK动态代理

(2)没有接口情况,使用CGLIB动态代理

* 创建对象的代理对象,使用代理对象替代之前的对象实现功能

(2)AOP底层(动态代理)

动态代理实现(JDK动态代理)

1 如果使用JDK动态代理,使用Proxy类里面的方法创建代理对象

(1)调用newProxyInstance方法

有三个参数:

第一个参数:类加载器

第二个参数:增强的方法所在类,实现的接口,可以是多个接口

第三个参数:实现这个接口InvocationHandler,创建代理对象,写增强的部分

 

2 动态代理代码

//生成代理对象,写增强的部分

class CalCulatorProxy implements InvocationHandler {

   

    //1 把创建的是谁的代理对象,把谁传递过来

    //因为创建CalCulatorImpl代理对象,传递CalCulatorImpl过来

    //1.1 使用有参数构造传递

    private Object cal;

   

    public CalCulatorProxy(Object cal) {

       this.cal = cal;

    }

 

    /*

     *  第一个参数:代理对象

     *  第二个参数:方法

     *  第三个参数:方法传递参数

     *

     * */

    //写增强的部分

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

      

       System.out.println("方法之前执行......"+method.getName()+" :传递参数:"+Arrays.toString(args));

      

       //让增强类里面的方法执行

       Object obj = method.invoke(cal, args);

      

       System.out.println("方法之后执行......"+obj);

       return obj;

    }

}

 

       CalCulatorImpl cal = new CalCulatorImpl();

       //返回创建代理对象

       CalCulatorInterface calInterface= (CalCulatorInterface) Proxy.newProxyInstance(JdkProxy.class.getClassLoader(), interfaces, new CalCulatorProxy(cal));

       // 接口 = new 实现类对象;

      

       //测试的方法

       int result = calInterface.cheng(1, 5);

       System.out.println("result:"+result);

(3)AOP术语

AOP术语

1横切关注点

(1)不是核心部分,有没有程序都可以运行,只是有个这个横切关注点,功能更加强大

 

2 连接点

 

3 切入点

 

4 通知(增强)

 

5 切面

 

Spring做AOP操作

1 spring做aop操作有多种方式

(1)基于aspectj的注解方式(使用)

(2)基于xml配置方式

 

2 什么是aspectj

(1)aspectj不是spring的一部分,是单独的框架

(2)在实际操作中,在spring经常使用aspectj进行aop操作

 

扩展:spring4.x使用注解需要导入aop的jar包,如果使用3.x不需要导入aop的jar包

 

(3)提供五种通知类型的注解

① @Before:前置通知,在方法执行之前执行

② @After:后置通知,在方法执行之后执行

③ @AfterRunning:返回通知,在方法返回结果之后执行

④ @AfterThrowing:异常通知,在方法抛出异常之后执行

⑥ @Around:环绕通知,围绕着方法执行

 

总结

1 spring配置连接池

(1)引入外部属性文件

 

2 bean管理(注解创建对象)

(1)导入jar包,包含aop的jar包

(2)在spring配置文件中开启包扫描

(3)在类上面使用注解可以创建

* 使用四个注解都可以用来创建对象

@Component

@Repository

@Service

@Controller

 

3 bean管理(注解注入属性)

在类的属性上面使用注解就可以实现注入

@AutoWired:根据类型注入

@Qualifier:根据名称注入,和@AutoWired一起使用

@Resource:根据类型和名称注入,不是spring提供的注解

 

4 什么是aop

(1)AOP是面向切面编程

(2)AOP不改变源代码情况下,增强类的方法的功能

(3)AOP底层使用动态代理

(4)动态代理有两种情况:

第一种有接口情况,使用jdk动态代理

第二种没有接口情况,使用cglib动态代理

 

5 aop底层动态代理(看懂)

 

6 aop操作术语

(1)连接点

(2)切入点

(3)通知

* 五种通知

(4)切面

 

7 aspectj

(1)aspectj不是spring一部分,单独的框架,和spring一起使用进行aop操作

AOP总结

 aop有接口情况,使用jdk动态代理,

如果没有接口,使用cglib动态代理

 

2 AOP总结

(1)AOP是面向切面编程

(2)AOP不改变源代码情况下,增强类的方法的功能

(3)AOP底层使用动态代理

(4)动态代理有两种情况:

第一种有接口情况,使用jdk动态代理

第二种没有接口情况,使用cglib动态代理`

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值