From the reference guide, page 113:
So, to answer your questions:
Spring offers a convenient way of working with scoped dependencies through scoped proxies. The easiest
way to create such a proxy when using the XML configuration is the <aop:scoped-proxy/>
element. Configuring your beans in Java with a @Scope annotation offers equivalent support with the
proxyMode attribute. The default is no proxy (ScopedProxyMode.NO), but you can specify
ScopedProxyMode.TARGET_CLASS or ScopedProxyMode.INTERFACES.
Yes it is. For Java config and Annotation config obviously there is no "default" behavior (i.e. use interface proxies when there is an interface, use classproxies otherwise) because with autowiring it doesn't make any sense (but then nobody's gonna miss it since it was but a source of problems in most cases).
Does that mean that INTERFACES is the equiavlent of proxy-target-class=false, and TARGET_CLASS is the same as proxy-target-class=true?
If you go the JavaConfig way or the annotated way, you shouldn't declare and use DefaultAdvisorAutoProxyCreator because that would be a mixing of strategies = chaos. For the JavaConfig, as stated in the sentence cited from the reference guide, the default for each bean defined with @Bean is no proxy, so you have to specify individually which bean has to be proxied (there is no way to specify that you want to proxy all the beans). For annotated config, you can specify it with the scoped-proxy attribute in the context:component-scan element:
Does the same still hold true when using annotations? If I specify TARGET_CLASS or INTERFACES, does the above Advisor override that proxy definition?
<context:component-scan base-package="org.example" scoped-proxy="interfaces" />