在春天有多个角色的组件

时间:2012-04-21 12:51:00

标签: java spring seam lifecycle

在接缝中的

@Role注释允许我们为具有不同范围的组件定义另一个命名角色 - 它允许我们将相同的组件类绑定到不同的上下文变量。 (任何Seam组件实例都可以绑定到多个上下文变量,但这允许我们在类级别执行它,并利用自动实例化。)

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

    ... 

}
春天怎么样?

2 个答案:

答案 0 :(得分:1)

在Spring中没有开箱即用的方法。

您可以使用XML或JavaConfig在多个范围内连接相同的bean类型,但不能在bean类中连接。并且:我也没有看到这种必要性。如果您在不同的范围内使用相同的bean类,则可能存在架构问题。

一种可能的解决方案:

定义一个包含数据的抽象类和两个包含Spring注释的子类,每个范围一个:

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

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

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

答案 1 :(得分: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();
}