java动态代理 其中一个容易忽略的坑

 注意: 我们知道 spring中封装了两种 动态代理方式 一种是jdk动态代理,一种是cglib动态代理


  但是我们需要注意的是 在我们获取动态代理对象的时候  如果我们的目标对象是实现了接口的

(1 ) 那么在底层是默认通过 jdk动态代理创建的 所以这时候我们在注入的时候一定要

                   通过接口接受注入。否则获取不到。

          @Autowired
  private DaoInterface dao;  

  而不可以 
  @Autowired
          private DaoImpl  dao;


  因为创建的代理对象和目标对象是相当于实现了同一个接口


(2 )  cglib是通过创建子级重写父级对象
  所以我们的代理对象是目标对象的子级。
  所以你可以这么写
  @Autowired

          private DaoImpl dao;

        


你可能感兴趣的:(动态代理)