• 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、通知类型

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

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

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

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

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

  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/xiaoxli/p/9592860.html
Copyright © 2020-2023  润新知