【问题标题】:Create a session scope bean in spring with javax annotations使用 javax 注释在 spring 中创建会话范围 bean
【发布时间】:2015-11-24 14:18:26
【问题描述】:

我正在使用带有 javax 注释 (JSR-330) 的 spring 4。在 Maven 中

     <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

所以我使用 @Named, @Inject@Resource from javax.annotation.* from javax.inject.* 而不是 Spring @Autowire, @Component , ... Spring 很好地支持它们。很好的例子:http://www.mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/

我的问题是我不能在带有 javax 注释的会话范围内拥有一个 bean,所以我使用了 @Named 和 spring @Scope: org.springframework.context.annotation.Scope

我可以使用 javax 注释创建会话范围 bean 吗?!

【问题讨论】:

  • 请查看我的回答。希望它能达到目的!

标签: java spring javax-inject


【解决方案1】:

根据this blogOfficial specificationJSR 330 不支持requestsession 开箱即用。您将必须创建自己的注释 为此。

让我们看看,如何为请求范围执行此操作。

创建您自己的范围注释:

@Scope
@Documented
@Retention(RUNTIME)
public @interface Request {
}

扩展 Jsr330ScopeMetadataResolver 以将您的注释映射到 Spring 的范围:

public class CustomScopeMetadataResolver extends Jsr330ScopeMetadataResolver {

  public Jsr330SpringScopeMetadataResolver() {
    registerScope(Request.class.getName(), WebApplicationContext.SCOPE_REQUEST);
  }

}

在您的 Spring 配置中使用您的自定义解析器:

<context:component-scan base-package="my.package"
  scope-resolver="my.resolver.package.CustomScopeMetadataResolver" />

参考来源:Spring and JSR 330 scopes

【讨论】:

    【解决方案2】:

    您必须使用注解:@SessionScoped

    例子:

    @SessionScoped
    public class DukesBday{
    ...
    }
    

    【讨论】:

    • SessionScoped 是 spring 注释的一部分
    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2018-06-25
    • 2013-05-22
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    相关资源
    最近更新 更多