一、spring代理
spring在做切面时会给切入点所在的类做代理,此时如果类实现某个接口则用JDK代理,代理类与被代理类实现同一个接口(所以将DAO注入service时bean指向DAO的接口引用)。未实现接口则用CGLIB代理,代理类为被代理类的子类。
注意:当类继承另一类时,另一类若实现接口,此时该类也实现了某个接口。
二、spring注入
当被注入的bean为单例模式而注入的bean为原型模式时,注入的bean会被自动转换为单例模式。此时若使注入bean每次取新实例(即保持原型模式),使用CGLIB代理的look-up方法注入。并给被注入bean提供注入bean的get方法,通过get方法取得注入bean。