Interface proxies are preferred for simpler objects.
Interface-based proxies (JDK dynamic proxies) are used when a class implements interfaces, whereas CGLIB proxies are used for classes without interfaces. Interface proxies are simpler but require an interface, while CGLIB proxies can proxy concrete classes.