Доброго времени суток.
Использую oval (spring+oval) для проверки входных данных.
Есть класс Account вроде этого:
@Guarded public class Account implements Serializable { 
@NotNull(message="email must not be null") 
@Email(message="email is invalid") 
private String email; 
public void setEmail(@AssertFieldConstraints("email") String email) { 
this.email = email; 
} 
public String getEmail() {
 return email; 
} 
} 
И конфигурация:
 
<bean id="account" factory-bean="accountDao" factory-method="getAccount"> 
<constructor-arg value="1" /> 
</bean> 
<bean id="ovalGuardInterceptor" class="net.sf.oval.guard.GuardInterceptor" /> 
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 
<property name="proxyTargetClass" value="true" /> 
<property name="beanNames" value="account" /> 
<property name="interceptorNames"><list><value>ovalGuardInterceptor</value></list></property> 
</bean> 
AccountUpdateController выглядит примерно так:
 
public class AccountUpdateController extends AbstractController { 
private AccountDao accountDao; 
private Account account; 
public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { 
Map<String, Object> model = new HashMap<String, Object>(); 
try { 
account.setEmail(request.getParameter("email")); 
accountDao.updateAccount(account);
model.put("message", "account updated"); 
} catch(ConstraintsViolatedException e) { 
model.put("message", "error: " + e.getMessage()); 
} 
return new ModelAndView("async/json", "model", model); 
} 
... 
} 
И работает это всё просто великолепно. Я получаю исключение если пользователь присылает неверное мыло.
Но аккаунт должен быть request-scoped по задумке.
Меняю конфигурацию на такую
 
<bean id="account" factory-bean="accountDao" factory-method="getAccount" scope="request"]> 
<constructor-arg value="1" /> 
<aop:scoped-proxy /> 
</bean> 
<bean id="ovalGuardInterceptor" class="net.sf.oval.guard.GuardInterceptor" /> 
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="proxyTargetClass" value="true" /> 
<property name="beanNames" value="*account*" /> 
<property name="interceptorNames"><list><value>ovalGuardInterceptor</value></list></property> 
</bean> 
И ловлю в логах сообщения типа:
Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class $Proxy25]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy25Я вроде понимаю, что код не может создать подкласс класса $Proxy25 (который, видимо, в свою очередь есть подкласс Account). Но толку от того, что я понимаю.. как починить?
Есть другой способ - просто использовать валидатор овала и вызывать метод validate ручками.
Но всё же предпочтительней было бы испльзовать первый способ (с aop), если получится.
Как бы сконфигурять это?