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

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

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

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

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

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

 

posted @ 2018-09-05 16:24  菠菜汤圆  阅读(108)  评论(0编辑  收藏  举报