2011-01-25 4 views
1

私はSpring 2.5.xと統合する必要がある古いプロジェクトを持っています(3.0は不可能です)。そう、Spring 2.5でカスタムautowiredオブジェクトを扱うには?

public class SomeBean { 
    UserSession userSession; 

    @PostContrust 
    public void init() { 
     HttpSession session = WebContext.current().getSession(); 
     userSession = (UserSession) session.getAttribute("userSession"); 
    } 
} 

がuserSessionを解決し、春にオートワイヤリングのためにそれを渡しますオートワイヤリングハンドラのいくつかの種類を記述することが可能です:

私は自分自身でそのフィールドuserSessionをinitializateする必要がBeanを作成しています

などのハンドラ:

public class AutowireHanlder { 
    public boolean isCandidate(Class<?> type) { 
     return type.equals(UserSession.class); 
    } 

    public Object resolve(Class<?> type) { 
     HttpSession session = WebContext.current().getSession(); 
     return (UserSession) session.getAttribute("userSession"); 
    } 
} 

答えて

4
私のBeanは同じように見えます

public class UserSessionFactoryBean extends AbstractFactoryBean<UserSession> { 

    @Override 
    public Class<?> getObjectType() { 
     return UserSession.class; 
    } 

    @Override 
    protected UserSession createInstance() throws Exception { 
     HttpSession session = WebContext.current().getSession(); 
     return (UserSession) session.getAttribute("userSession"); 
    } 

} 

がBeanとしてUserSessionFactoryBeanを定義します:

<bean scope="session" class="com.xyz.UserSessionFactoryBean"/> 

を...そして、あなたはその後、他のBeanにUserSessionをautowireすることができるはず

私はセッションスコープFactoryBean使用してこれを行うだろう。それは、各HttpSessionの新しい値を返さなければならないので、

ここで複雑さは、(bean scopes上のドキュメントを参照してください)UserSessionFactoryBeansession-scopedでなければならないことです。つまり、autowiredされるBeanはでもでなければなりません。それ以外の場合は失敗します。 scoped-proxiesを使用してこの制限を回避することができます。

関連する問題