在春季创建一个带有javax注释的会话作用域bean



我正在使用带有javax注释(JSR-330(的Spring 4。在马文

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

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

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

是否可以使用 javax 注释创建会话作用域 Bean?!

根据此博客和官方规范,JSR 330不支持request或 开箱即用session。您必须创建自己的注释 为此。

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

创建您自己的范围注释:

@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 和 JSR 330 示波器

必须使用注释:@SessionScoped

例:

@SessionScoped
public class DukesBday{
...
}

最新更新