JDK 动态代理是java提供的,spring aop默认就是使用jdk动态代理来实现的,但是JDK动态代理需要类实现接口,底层是通过实现相同的接口,而cglib需要导入cglib的jar,它能够代理没有实现接口的类,底层是生成被代理类的子类。
在我们平常使用spring来依赖注入时,经常会用到两个注解@Autowired和@Resource,其中@Autowired默认是按类型匹配的,而@Resource默认是按名称来进行匹配的。
例如:
@Autowired
private UserService userService;
@Resource
private UesrServiceImpl userServiceImpl
这两种形式中,@Autowired默认就是按类型匹配的,如果没有导入cglib的jar,那么第二种形式就是错误的,因为@Resource默认是按照名称进行匹配。