【发布时间】:2019-01-04 16:37:02
【问题描述】:
我想注入同一对象的不同实例(使用 Session 或 Appplication Scope)。
我想要两个不同的汽车计数器实例(一个用于红色的,一个用于绿色的)。 相反,它会创建对同一对象的两个引用。
我该如何解决这个问题? (将具有 Application Scope 的计数器保留在服务中,由 session Scope 决定)。
RestSession
@Path("/api/session")
@SessionScoped
public class RestSession implements Serializable {
@Inject @Contatori
private IContatore countRedCar;
@Inject @Contatori
private IContatore countGreenCar;
@Produces("application/json")
@GET
@Path("/red")
public ResultDTO countRed() {
countRedCar.conta();
return new ResultDTO(countRedCar.getCount(),countGreenCar.getCount());
}
@Produces("application/json")
@GET
@Path("/green")
public ResultDTO countGreen() {
countGreenCar.conta();
return new ResultDTO(countRedCar.getCount(),countGreenCar.getCount());
}
}
联系
package it.paolo.javaee.util;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
@Contatori
public class Conta implements IContatore{
private int count;
public Conta() {
count=0;
}
public int conta() {
return count+=1;
}
public void setCount(int i) {
count=i;
}
public int getCount() {
return count;
}
}
IContatore
package it.paolo.javaee.util;
import java.io.Serializable;
public interface IContatore extends Serializable {
public int conta();
public void setCount(int i);
public int getCount();
}
@interface Contatori3
package it.paolo.javaee.util;
import javax.inject.Qualifier;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
public @interface Contatori3 {
}
【问题讨论】:
-
可能有错别字:
@Contatori和@interface Contatori3 -
您的两次注射都使用相同的限定符
@Contatori,因此为您提供相同的实例 -
书写错误
标签: java java-ee-7 inject apache-tomee