我正在使用带有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 @Scope
:org.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{
...
}