zoukankan      html  css  js  c++  java
  • spring~2

    1、spring的Bean管理(注解方式)

      (1)<!-- Spring 的注解开发:组件扫描(类上注解: 可以直接使用属性注入的注解) -->
          <context:component-scan base-package="包的全限定名"/>

      (2)在相关类上加注解:@Component(value="bean的名称")

    2、spring的Bean管理中常用的注解:

    (1)@Component:组件(作用在类上)

      spring中提供@Component的三个衍生注解:

      @Controller:WEB层

      @Service:业务层

      @Repository:持久层

    (2)属性注入的注解(使用注解注入方式可以不用提供set方法)

      @Value:用于注入普通类型

      @Autowired:自动装配,默认按类型进行装配

        @Qualifier:强制使用名称注入

      @Resource相当于@Autowired和@Qualifier一起使用

    3、AOP的用处?

      对程序进行增强:不修改源码的情况下

      AOP可以进行权限校验,日志记录,性能监控,事务控制

    4、AOP底层实现

      代理机制:spring的AOP的底层用到两种代理机制

      JDK的动态代理:针对实现了接口的类产生代理

      Cglib的动态代理:针对没有实现接口的类产生代理。应用的是底层字节码增强的技术,生成当前类的子类对象。

      

    public class MyCglibProxy implements MethodInterceptor{
      private CustomerDao customerDao;
      public MyCglibProxy(CustomerDao customerDao){
        this.customerDao = customerDao;
      }
      // 生成代理的方法:
      public CustomerDao createProxy(){
        // 创建 Cglib 的核心类:
        Enhancer enhancer = new Enhancer();
        // 设置父类:
        enhancer.setSuperclass(CustomerDao.class);
        // 设置回调:
        enhancer.setCallback(this);
        // 生成代理
        CustomerDao customerDaoProxy = (CustomerDao) enhancer.create();
        return customerDaoProxy;
      }
      @Override
      public Object intercept(Object proxy, Method method, Object[] args, MethodProxy
      methodProxy) throws Throwable {
        if("delete".equals(method.getName())){
          Object obj = methodProxy.invokeSuper(proxy, args);
          System.out.println("日志记录================");
          return obj;
        }
        return methodProxy.invokeSuper(proxy, args);
      }
    }

    5、AOP开发的相关术语

    Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring ,这些点指的是方法,因为 spring 只支持方法类型的连接点.                          

    Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义.

    Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)                          

    Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类 动态地添加一些方法或 Field.               

    Target(目标对象):代理的目标对象

    Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装在期织入                

    Proxy(代理) :一个类被 AOP 织入增强后,就产生一个结果代理类
    Aspect(切面): 是切入点和通知(引介)的结合

    6、通知类型

      前置通知:在目标方法之前执行

      后置通知:在目标方法之后执行

      环绕通知:在目标方法执行前和执行后执行

      异常抛出通知:在目标方法执行出现异常的时候执行

      最终通知:无论目标方法是否出现异常,最终通知都会执行

  • 相关阅读:
    pycharm鼠标光标变成黑色方块
    华章8月书讯,夏日静心好读书
    测试既是一门科学,也是一门艺术
    计算机科学与技术专业教指委将成立“物联网工程专业教学研究专家组”
    【七夕送好书】转微博获赠书!
    孟岩谈《C++程序设计原理与实践》
    【有奖活动】华章IT15周年,评选您心中最有影响力的10种图书
    《测试之美》连载:创建开源的QA社区
    Web前端开发之“常见模块你真的很了解吗?”
    测试驱动开发简介
  • 原文地址:https://www.cnblogs.com/xiaoxli/p/9592860.html
Copyright © 2011-2022 走看看