Tag: dependency injection

Java EE 6 @Inject懒惰?

我正在进行一些重构和审查我们正在开发的应用程序。 在这样做时我发现注入了更多的豆子,我认为以懒惰的方式装载它们会更适合它们的目的。 我正在使用Java EE 6,并且倾向于使用比EJB注入更多的CDI。 所以问题是是否可以懒惰地注入豆类,如果是这样,你怎么能这样做?

Springdependency injection:注入所有接口实例

如果可能的话,我如何使用实现特定接口的所有其他Spring bean的集合来配置Spring bean? 示例:我想将CarFactory bean与实现CarManufacturer接口的bean列表连接起来。

如何将Spring @Autowired必需属性转为false进行测试?

到目前为止,我一直在使用@Required注释来确保在Spring配置的应用程序中对我的bean进行DI。 要启用注释,需要在配置中声明RequiredAnnotationBeanPostProcessor bean。 在您的测试配置中,您只是不要声明它,因此如果不需要某些bean,您不必在配置中使用它们。 我想切换到更少的XML并使用@Autowired注释,但它默认为required = true,这对于运行时配置来说很好。 但我需要@Autowired才需要= false仅用于测试目的 – 同时保持运行时所需。 这有可能吗? 我找不到以声明方式将required属性设置为false的方法。 干杯

是否有可能在Jersey中访问注入的HttpServletRequest,而不是代理

在Jersey / JAX-RS资源中注入HttpServletRequest时,注入的值是代理。 例如: @Path(“/myResource”) class MyResource { @Inject HttpServletRequest request; … } 将为请求的HttpServletRequest注入一个Proxy对象。 我需要访问实际的HttpServletRequest实例对象,因为我想使用一些不在代理HttpServletRequest接口中的容器特定function。 在jersey中有没有办法通过注射进入实际物体? 我知道在旧版本的Jersey中你可以注入ThreadLocal来实现这一点。 但这似乎不再支持jersey2.15了。 基本原理:我的代码依赖于实现HttpRequest org.eclipse.jetty.server.Request中的function,并添加了HTTP / 2推送的function。 我想用Jersey / JAX-RS。

Guice:Singleton.class和@Singleton之间的差异

在Guice,有什么区别: // Inside your AbstractModule subclass: @Override public void configure() { bind(Service.class).to(ServiceImpl.class).in(Singleton.class); } 和: @Override public void configure() { bind(Service.class).to(ServiceImpl.class); } @Provides @Singleton public ServiceImpl providesService() { return new ServiceImpl(); } 它们都是一样的吗? 你什么时候使用一个? 提前致谢。

如何在jersey2 / hk2应用程序中获取Jackson Object Mapper的引用

我有一个jersey2应用程序配置为通过jackson支持JSON,添加 org.glassfish.jersey.media jersey-media-json-jackson ${jersey.version} 在POM文件中 public MyApplication() { … register(JacksonFeature.class) … } 在我的申请中。 一切正常,我的资源将反序列化的POJO作为参数 @POST @Consumes(MediaType.APPLICATION_JSON) public void blah(MyPojo p) { … } 现在,其中一个资源需要引用Jackson的ObjectMapper来自行进行反序列化。 我尝试过这样的事情 @Inject public MyResource(@Context ObjectMapper mapper) { … } 要么 @GET public String foo(@Context ObjectMapper mapper) { … } 但在这两种情况下,对mapper的引用都为null。 如何在我的资源中注入对ObjectMapper的引用?

使用没有Servlet容器的CDI

我想用Java Swing编写一个简单的Java桌面应用程序。 通常我使用Spring Framework来执行dependency injection并构建整个类结构。 但是,我已经看到CDI越来越受欢迎,并想尝试一下。 我想使用CDI对我的项目进行dependency injection,但我不知道如果没有Servlet容器(因为它使用的是Spring)是否可行。 每个教程似乎都与servlet容器或应用程序服务器有关。

Guice代理支持循环依赖

我在启动时的代码中遇到以下错误: 尝试代理com.bar.Foo来支持循环依赖,但它不是一个接口。 这种代理究竟是如何工作的? 如果我只是在接口后面抛出足够的类,一切都会好吗? (我知道循环依赖通常是代码味道,但我认为在这种情况下它是可以的。)

“@inject”-ed属性保持为null

我试图将一个服务注入我的bean但它始终为null 。 我收到以下错误:WELD-001000错误解析属性userBean对基础null。 一些代码片段: 的index.xhtml Hello from Facelets #{userBean.name} userbean.java package beans; import Domain.User; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.inject.Inject; import javax.inject.Named; import service.UserService; @Named @SessionScoped public class UserBean implements Serializable{ @Inject UserService service; private User user; public UserBean(){ this.user = service.find_user(“foo”); } public String getName(){ return “bar”; } } UserService.java package service; import Domain.User; […]

如何通过CDI实现命令模式?

我是CDI的新手,有点困惑。 我有以下问题。 我们有课程动作。 我们有包装类,它将所有Action对象保存在hashmap中。 像这样的东西。 class TestAction implements Action{ @EJB private MyBean bean; public void doSomething(){ //here we do something with injected EJB } } class Foo { private HashMap hm; public void execute (String action){ this.hm.get(action).doSomething(); } } 当我不使用CDI时 – 一切都很好。 但我需要使用它。 因此,据我所知,我必须通过cdi容器创建所有操作,否则CDI容器无法将托管bean注入其中。 所以我的问题是什么是通过CDI实现命令模式的最佳方式? 编辑:我读过Dhanji R. Prasanna的dependency injection,Weld-reference(WR),JavaEE7教程(CDI部分) – 不建议阅读最后一篇。 在思考了一点之后,我明白我需要注入HashMap。 此外,我明白我必须使用生产者方法。 好。 我说。 […]