注意: 我们知道 spring中封装了两种 动态代理方式 一种是jdk动态代理,一种是cglib动态代理
但是我们需要注意的是 在我们获取动态代理对象的时候 如果我们的目标对象是实现了接口的
private DaoInterface dao;
而不可以
@Autowired
private DaoImpl dao;
因为创建的代理对象和目标对象是相当于实现了同一个接口
(2 ) cglib是通过创建子级重写父级对象
所以我们的代理对象是目标对象的子级。
所以你可以这么写
@Autowired
但是我们需要注意的是 在我们获取动态代理对象的时候 如果我们的目标对象是实现了接口的
(1 ) 那么在底层是默认通过 jdk动态代理创建的 所以这时候我们在注入的时候一定要
通过接口接受注入。否则获取不到。
@Autowiredprivate DaoInterface dao;
而不可以
@Autowired
private DaoImpl dao;
因为创建的代理对象和目标对象是相当于实现了同一个接口
(2 ) cglib是通过创建子级重写父级对象
所以我们的代理对象是目标对象的子级。
所以你可以这么写
@Autowired
private DaoImpl dao;