几条原则:
- If the class of a target object that is to be proxied (hereafter simply referred to as the target class) doesn't implement any interfaces, then a CGLIB-based proxy will be created.【原因是:This is the easiest scenario, because JDK proxies are interface based, and no interfaces means JDK proxying isn't even possible. 】
- If the
proxyTargetClass
property of theProxyFactoryBean
has been set totrue
, then a CGLIB-based proxy will be created. 【无视ProxyFactoryBean的属性proxyInterfaces是否有设置成为某一个或多个接口名
】 - If the
proxyInterfaces
property of theProxyFactoryBean
has been set to one or more fully qualified interface names, then a JDK-based proxy will be created.
- If the
proxyInterfaces
property of theProxyFactoryBean
has not been set but the target class does implement one (or more) interfaces, then theProxyFactoryBean
will auto-detect the fact that the target class does actually implement at least one interface, and a JDK-based proxy will be created, or a CGLIB-based proxy will be created.【如果是JDK代理这一条和第三条行为一致】