我正在使用Jax-RS 2.0与Jersey 2.22.1和Java SE 8,部署在Tomcat 8.0.30中。
我用适当的JAX-RS注释注释POJO,并按预期工作。我还用@Singleton
注释了POJO。该类被懒惰地实例化为单例,这是@Singleton
的预期行为。但我想在应用程序启动时热切地实例化该类。有没有办法做到这一点?我查看了@Startup
注释,但不幸的是,这是EJB包的一部分,我没有使用EJB(我也不想导入EJB jar文件)。
我也在使用Springframework 4.2.4,默认情况下,在使用@Service
或@Component
注释时会急切地实例化单例,但不幸的是,我不能在JAX-RS POJO上使用这些注释(这这就是为什么课程从SpringBeanAutowiringSupport
延伸。
我附加了java代码,但由于它按预期工作,我不确定会添加任何有用的东西。
import javax.inject.Singleton;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.core.MediaType;
import org.xxx.profile.util.GeneralUtil;
import org.xxx.profile.util.WebServiceLogger;
import org.xxx.profile.util.datatransfer.AccountDTO;
import org.xxx.profile.web.exception.RestException;
import org.xxx.profile.web.exception.FailureResponse;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
@Singleton
@Path( "account" )
public class AccountWebService extends SpringBeanAutowiringSupport{
@Autowired
private AccountLogic accountLogic;
@Autowired
protected SimpleParser simplerParser;
@GET
@Path("get/{id: [a-zA-Z][a-zA-Z_0-9]*}")
@Produces( MediaType.APPLICATION_JSON )
@Consumes( MediaType.APPLICATION_JSON )
public AccountDTO retrieveAccount(@PathParam("id") String customerId) throws RestException {
try {
return accountLogic.retrieveAccount(customerId);
}
catch(Exception e){
String transactionID = GeneralUtil.getUniqueID();
WebServiceLogger.severe( transactionID, "Unable to retrieve an account for the customerId: " + customerId, e, this.getClass() );
throw new RestException( new FailureResponse( FailureResponse.Status.FAIL, "add user friendly message here", transactionID ), e );
}
}
}
答案 0 :(得分:0)
如果您想使用Jersey Spring DI支持,您需要将jersey-spring3模块添加到依赖项列表中:
<dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-spring3</artifactId> <version>2.22.1</version> </dependency>
它似乎也适用于Spring 4。见Question 21443088