gpt4 book ai didi

java - 业务层 Jersey 的基本依赖注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:20 24 4
gpt4 key购买 nike

我正在从事一个使用 RESTful 服务的项目。我有 web 层、业务层等模块。我添加了基本的 api 层(使用 Jersey )并且我得到了获取请求的基本响应。现在我必须将它连接到业务层。我在谷歌上搜索,但我不确定如何为我的项目实现每个解决方案。

这是我的旅行资源类:

@Path("trip")
public class TripResource {

@Context
private UriInfo context;
@Inject
private AdminService adminService;

public TripResource() {
}

@GET
@Produces("text/plain")
public List<TripDTO> getText() {
return adminService.listAllTrips();
}

}

我用它来添加资源类:

@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends Application {

@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
addRestResourceClasses(resources);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(cz.infi.javatravelagency.ServiceResource.class);
resources.add(cz.infi.javatravelagency.TripResource.class);
}
}

我的 pom.xml:

<name>JavaTravelAgency - Api module</name>
<dependencies>
<dependency>
<groupId>cz.infi</groupId>
<artifactId>javatravelagency-business</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Java language version -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
<!-- Servlet 3.0 without web.xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>

我试着关注 answer in this link .我刚刚补充说:

public class MyApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(AdminServiceImpl.class).to(AdminService.class);
}
}

现在我卡住了。

如何将这个 Binder 添加到我的配置类中?不使用任何其他技术的最简单实现是什么?

最佳答案

这也花费了我很多时间。

尝试以下操作:

  1. 按照此处所述将 HK2 Binder 添加到您的项目:https://jersey.java.net/documentation/latest/migration.html

在这里您必须将绑定(bind)添加到您的业务逻辑中。您已经有了这个(只是为了完整性而添加)。

g.

public class MyBinder extends AbstractBinder {

@Override
protected void configure() {
// request scope binding
bind(MyInjectablePerRequest.class)
.to(MyInjectablePerRequest.class)
.in(RequestScope.class);
// singleton binding
bind(MyInjectableSingleton.class).in(Singleton.class);
// singleton instance binding
bind(new MyInjectableSingleton()).to(MyInjectableSingleton.class);
}
}

然后将“ResourceConfig”类添加到您的项目并像这里一样注册您的 Binder :http://sleeplessinslc.blogspot.de/2012/10/jax-rs-20-jersey-20-preview-example.html

在您的情况下,您可以简单地从 ResourceConfig 而不是 ApplicationConfig 扩展您的 ApplicationConfig(我就是这样做的)。在“getClasses()”中注册的所有类都应该如下所述。

g.

/**
* Application config
*/
public class ApplicationConfig extends ResourceConfig {

public ApplicationConfig() {
register(SomeResources.class, SomeProviders.class);

// Register different Binders
addBinders(new MyBinder());
}
}

至少确保您的 web.xml 使用该配置。这取决于您的设置(glassfish、servlet v1/v2 等)

因为您已经在使用 ApplicationConfig 类,所以很有可能您已经在使用正确的设置。

再举个例子:

<servlet>
<servlet-name>om.example.package.to.your.config.ApplicationConfig</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.example.package.to.your.config.ApplicationConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

希望这会有所帮助;)

问候本


现在找到一个类似的帖子: Dependency injection with Jersey 2.0

关于java - 业务层 Jersey 的基本依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com