現在のユーザーを返すリクエストスコープのBeanがあります。
<bean id="currentUserResolver" class="com.shutup.CurrentUserResolver" />
<bean scope="request" factory-bean="currentUserResolver" factory-method="getCurrentUser">
<aop:scoped-proxy/>
</bean>
これは、Userオブジェクトを自動配線して、現在のユーザーを取得できるようにするためです。私もやりたいのは、initメソッドを持つようにUserクラスを変更することです。
<bean id="user" class="com.shutup.model.User" init-method="postInitialize" />
私がこれを行うと、Springは次のように不平を言います。
No unique bean of type [com.shutup.model.User] is defined: expected single matching bean but found 2: [user, currentUserResolver$created#0]
postInitializeメソッドをUserに宣言的に追加する方法はありますか?ユーザーがインターフェースを実装するオプションもあると思いますが、コードをSpringに密接に結び付けたくはありません。
CurrentUserResolver:
public class CurrentUserResolver
{
static Log log = LogFactory.getLog(CurrentUserResolver.class.getName());
@Autowired
private UserFactory userFactory;
public User getCurrentUser()
{
log.info("attempting to get current user");
User currentUser = null;
if(SecurityContextHolder.getContext() != null &&
SecurityContextHolder.getContext().getAuthentication() instanceof UserAuthentication)
{
UserAuthentication authentication = (UserAuthentication)SecurityContextHolder.getContext().getAuthentication();
User serializedUser = (User)authentication.getPrincipal();
currentUser = this.userFactory.getUserFromTwitterId(serializedUser.getTwitterId());
}
return currentUser;
}
}