Java 使用请求范围和线程进行注入
我有一些bussines类,它们被注入了一些使用servlet请求范围提供的依赖项 问题是,我想在一些比servlet请求更有效的线程中使用该业务类。 最透明的方法是什么?如果您使用的是Spring(根据您用来描述问题的术语,您似乎正在使用Spring),那么您可以为请求范围的对象使用AOP范围的代理,并将此代理注入到servlet请求之外的对象中。作用域代理将负责在每次访问时使用正确的实例。好, 我不确定我是否了解你的问题。我认为架构本身存在问题,但这可以帮助您: Guice模块Java 使用请求范围和线程进行注入,java,guice,guice-servlet,Java,Guice,Guice Servlet,我有一些bussines类,它们被注入了一些使用servlet请求范围提供的依赖项 问题是,我想在一些比servlet请求更有效的线程中使用该业务类。 最透明的方法是什么?如果您使用的是Spring(根据您用来描述问题的术语,您似乎正在使用Spring),那么您可以为请求范围的对象使用AOP范围的代理,并将此代理注入到servlet请求之外的对象中。作用域代理将负责在每次访问时使用正确的实例。好, 我不确定我是否了解你的问题。我认为架构本身存在问题,但这可以帮助您: Guice模块 bind(B
bind(Bussines.class).annotatedWith(Names.named("request")).to(Bussines.class).in(RequestScoped.class);
bind(Bussines.class).annotatedWith(Names.named("session")).to(Bussines.class).in(SessionScoped.class);
bind(Bussines.class).annotatedWith(Names.named("application")).to(Bussines.class).asEagerSingleton();
@Inject @Named("request")
private Bussines bussines; //inject a new bussines class every request
@Inject @Named("session")
private Bussines bussines; //inject a new bussines class each session
//This is little bit tricky, cuz Bussines is stored in session. In Stage.PRODUCTION are all injection created eagerly and there is no session at injection time. Session binding should be done in lazy way - inject provider and call bussinesProvider.get() when em is needed;
@Inject @Named("application")
private Bussines bussines; //inject singleton
用法
bind(Bussines.class).annotatedWith(Names.named("request")).to(Bussines.class).in(RequestScoped.class);
bind(Bussines.class).annotatedWith(Names.named("session")).to(Bussines.class).in(SessionScoped.class);
bind(Bussines.class).annotatedWith(Names.named("application")).to(Bussines.class).asEagerSingleton();
@Inject @Named("request")
private Bussines bussines; //inject a new bussines class every request
@Inject @Named("session")
private Bussines bussines; //inject a new bussines class each session
//This is little bit tricky, cuz Bussines is stored in session. In Stage.PRODUCTION are all injection created eagerly and there is no session at injection time. Session binding should be done in lazy way - inject provider and call bussinesProvider.get() when em is needed;
@Inject @Named("application")
private Bussines bussines; //inject singleton
还可以使用将不同范围的对象绑定到类。别忘了把它暴露出来。我看到3个选项:
- 您可以将所需的信息添加到具有更大范围(如应用程序或会话范围)的对象中
- 您可以将信息持久保存在文件或数据库中,稍后再进行查找
- 您可以保存线程上的信息或使用线程作用域: