我有一个带有服务和 dao 层的 spring (3.1) 应用程序。我尝试在这个弹簧层中使用 requestfactory (gwt 2.4)。
这是我的一些课
我的域类
public class Account {
Long id;
String username;
// get, set
}
spring和gwt之间的桥梁
public class SpringServiceLocator implements ServiceLocator {
@Override
public Object getInstance(Class<?> clazz) {
HttpServletRequest request = RequestFactoryServlet.getThreadLocalRequest();
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
return context.getBean(clazz);
}
}
我的帐户代理
@ProxyFor(value=Account.class, locator = AccountLocator.class)
public interface AccountProxy extends EntityProxy{
public Long getId();
public String getUsername();
public void setUsername(String userName);
public void setId(Long id);
}
请求上下文类
@Service(locator = SpringServiceLocator.class, value =AccountService.class)
public interface AccountRequest extends RequestContext {
Request<List<AccountProxy>> loadAllAccounts();
}
我的 requestFactory 类
public interface AccountRequestFactory extends RequestFactory {
AccountRequest accountRequest();
}
我的春季服务
public interface AccountService {
public List<Account> loadAllAccounts();
}
@Service
public class AccountServiceImpl implements AccountService{
@Autowired
private AccountDAO accountDAO;
}
避免在实体中放置方法的帐户定位器
public class AccountLocator extends Locator<Account, Long> {
@Autowired
private AccountDAO accountDAO;
@Override
public Account create(Class<? extends Account> clazz) {
return new Account();
}
}
应用程序上下文.xml
<context:annotation-config />
<context:component-scan base-package="com.calibra" />
<bean id="accountService" class="org.calibra.server.service.AccountServiceImpl"/>
<bean id="accountDAO" class="org.calibra.server.dao.AccountDAOImpl"/>
演示工作,但我收到此错误:
com.google.web.bindery.requestfactory.server.UnexpectedException:找不到具有单个键类型参数的静态方法
同样在我的 AccountProxy 上,我收到此投诉(警告)
域类型 org.calibra.domain.Account 没有 Account findAccount(java.lang.Long) 方法。尝试将 AccountProxy 发送到服务器将导致服务器错误。
我不想在我的域类中添加查找方法。我试图把这个方法放在我的 spring 服务中,但我得到了同样的警告。
使用可以正常工作的定位器进行编辑
奇怪的是我需要将bean放在applicationContext中,context:annotation和context:component-scan似乎没用
任何的想法?