2012-04-21 7 views
0

シームで@Roleアノテーションを使用すると、コンポーネントの名前付きロールを別のスコープで定義することができ、同じコンポーネントクラスを異なるコンテキスト変数にバインドすることができます。 (任意のSeamコンポーネントのインスタンスは、複数のコンテキスト変数にバインドすることができるが、これは、私たちはクラスレベルでそれを行うと、自動インスタンス化を利用することができます。)スプリングで複数のロールを持つコンポーネント

@Name("user") 
@Entity 
@Scope(CONVERSATION) 
@Roles({@Role(name="currentUser", scope=SESSION), 
     @Role(name="tempUser", scope=EVENT)}) 
public class User { 

    ... 

} 

何春はどうですか?

答えて

1

Springでこれを行う方法はありません。

XMLまたはJavaConfigを使用して複数のスコープに同じBeanタイプを配線できますが、Beanクラスからは結合できません。そして:私はそれの必要性も見ません。異なるスコープで同じBeanクラスを使用している場合は、おそらくアーキテクチャ上の問題があります。

一つの可能​​な解決策:

、スコープごとに1つのデータとSpringのアノテーションが含まれている2つのサブクラスを保持する抽象クラスを定義します。

public abstract class User{ 
    // fields, getters , setters 
} 

@Component @Scope("session") 
public class SessionUser extends User{} 

@Component @Scope("request") 
public class TempUser extends User{} 
0

私はJavaConfigを使用:

@Bean 
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) 
public EntityService requestScopedEntityService() { 
    return new EntityService(); 
} 

@Bean 
@Scope(value = "prototype") 
public EntityService prototypeScopedEntityService() { 
    return new EntityService(); 
} 
関連する問題