Tag: dependency injection

解释这个Spring MVC Controller的行为

我有这堂课: @Component @Scope(“session”) @Entity @Table(name = “users”) public class User { @Id @GeneratedValue @GenericGenerator(name = “incremental”, strategy = “increment”) private Long userID; @Column(nullable = false) private String username; @Column(nullable = false) private String email; @Column(nullable = false) private String password; // getters and setters } 而这个控制器: @Controller @SessionAttributes(“user”) @Scope(“request”) public class UserCreationWizard { @Autowired private […]

Jersey2,Hk2dependency injection(自动)给出AbstractMethodError:org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter

坚持这个问题一段时间。 我正在尝试集成Tomcat 9,JDK 10,Jersey 2.23,HK2(用于DI)以及自动dependency injection。 我已经按照本教程 ,但得到以下错误,我搜索了很多,但没有找到任何东西。 我已经使用依赖来生成“META-INF / hk2-locator / default”,它正在生成。 依赖 org.glassfish.hk2 hk2-metadata-generator 2.4.0 错误堆栈 SEVERE: Servlet [MyApplication] in web application [/javaeeLearning] threw load() exception java.lang.AbstractMethodError: org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter([Lorg/glassfish/hk2/api/Filter;)V at org.glassfish.hk2.utilities.ServiceLocatorUtilities.addClasses(ServiceLocatorUtilities.java:451) at org.glassfish.hk2.utilities.ServiceLocatorUtilities.enablePerThreadScope(ServiceLocatorUtilities.java:107) at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:141) at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:123) at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:330) at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:392) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1124) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1079) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971) at […]

Guice:为共享库创建注入器

Google Guice新手。 我想用它来处理我正在开发的三个组件的所有IoC和AOP方法拦截: WidgetClient – 一个Swing应用程序 WidgetServer – 客户端将连接到/与之通信的小型EAR WidgetShared – 一个“commons”JAR,包含客户端和服务器使用的公共类 使用Swing应用程序,我会在某个地方进行显式调用,如下所示: public static void main(String[] args) { initGuiceInjectors(); } private static initGuiceInjectors() { Guice.createInjector(mySwingAppModule); } mySwingAppModule将定义Swing应用程序依赖项的所有绑定。 我将在服务器EAR中做一些非常相似的事情。 当谈到WidgetShared库时,我很窒息,因为lib没有一个入口点:它只是客户端和服务器将在整个地方使用的一堆包,类,接口和枚举。 所以我的第一个问题是: 我在哪里为WidgetShared JAR调用Guice.createInjector() ? 这个问题强调了第二个(类似的)问题,这也是我选择在这里进行分组的原因。 我阅读了Guice的“最佳实践”,并且压倒性的共识似乎是(在适用的情况下),将Module实现保持在包级别。 因此,对于每个包,将有一个Module具体化定义该包中所有类型的绑定。 这是对单个整体Module的改进,它定义了整个应用程序的绑定。 所以,上面的代码片段( Guice.createInjector(mySwingAppModule) )实际上并不是我的代码最终会是什么样的(抱歉我撒了!)。 我的第二个问题是: 创建多个注射器的“最佳实践”是什么? 我看到createInjector(Module… modules)可以使用vararg Module参数。 所以,对我而言,似乎我想拥抱这个“ 每个模块1个模块 ”的最佳实践,在某些时候我必须拥有如下所示的代码: Guice.creatorInjector(package1Module, package2Module, package3Module, package4Module, package5Module, package6Module, […]

在websphere共享库中使用CDI

我们使用websphere管理控制台中定义的共享库在多个应用程序之间共享类。 我想知道是否可以在这些类中使用CDI(上下文和dependency injection)? 如果是这样,我只需要将beans.xml放在共享库中的jar中,还是有进一步的步骤? 注意:我不能放弃使用共享库,因为这将是太多的重构工作。

Java Generics:在运行时是否保留了有关generics类型的任何元信息?

背景 我对Javagenerics的理解是它完全是一个编译时function(主要关注类型安全检查)。 任何generics类的类型信息在运行时丢失( 类型擦除 )。 不过,我看到许多框架似乎也在运行时利用了类型信息。 例如,谷歌guice 提供商 。 guice提供程序可以在运行时实例化并提供它的generics类型的新实例。 class Container { @Inject public Container(Provider contentProvider) { //This works at Runtime… but How ??? //When type’s are not even preserved at runtime, how does the Provider knows it has to instantiate an object of type ‘Content’ Content content = contentProvider.get(); } } 题 是否存在与在运行时保留的generics类型相关的任何信息。 […]

在restful WS中的dependency injection

我有简单的宁静WS @Path(“basic”) public class ServiceRS { private IServiceJAX service; @GET @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public String find(@FormParam(“searchRequest”) final String searchRequest) { //… final List response = service.find(search); //… } } 其中IServiceJAX是jax-webservice的@Local接口。 我可以使用注释将IServiceJAX注入ServiceRS吗? 我不想使用JNDI查找…

如何在应用程序启动时注入“登录用户”之类的“运行时”依赖项?

我只是没有得到这个: 我在我的java GWT应用程序中使用Gin来做DI。 登录屏幕已集成到完整的应用程序窗口中。 在用户登录后,我想将用户对象注入到我创建的GUI Presenters等其他类中,所以我认为我有某种运行时依赖性。 我怎么做? 我能想到的一个解决方案是: class Presenter { @Inject Presenter(LoggedInUserFactory userFactory) { User user = userFactory.getLoggedInUser(); } } class LoggedInUserFactoryImpl { public static User user; User getLoggedInUser() { return user; } } 因此,当用户成功登录并且我有对象时,我在LoggedInUserFactory设置静态属性,但这只有在用户登录后创建Presenter时才有效,但事实并非如此。 或者我应该使用全局静态注册表? 我只是不喜欢在我的类中使用静态依赖的想法。 非常感谢任何输入。

Guice:使用属性绑定注释

现在我正在阅读Guice的官方文档,但我有一些与Binding Annotation章节相关的问题。 这解释了“带属性的注释”。 但是,我不确定解释。 绑定注释与属性 Guice支持绑定具有属性值的注释。 在极少数情况下,您需要这样的注释: 创建注释@interface。 创建一个实现注释接口的类。 遵循Annotation Javadoc中指定的equals()和hashCode()指南。 将此实例传递给annotatedWith()绑定子句。 我不明白这个解释。 有什么解释意图? 我学习了两个注释,例如@Paypal(在本文档中)和@name。 但是,如果我想在同一个类中使用两个以上的依赖项,那么我们只能用这两个注释来实现? 现在我很困惑,有人可以解释一下吗?

Java / Jersey – 使用ParamInjectionResolver创建自己的注入解析器 – 奇怪的行为

我正在尝试创建一个注射旋转变压器。 我有一个数据类: public class MyData { … } 我有以下注释: @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyDataInject { } 我的注射解析器看起来像这样: public class MyDataInjectionResolver extends ParamInjectionResolver { public MyDataInjectionResolver () { super(MyDataValueFactoryProvider.class); } @Singleton public static class MyDataValueFactoryProvider extends AbstractValueFactoryProvider { @Inject public MyDataValueFactoryProvider(MultivaluedParameterExtractorProvider provider, ServiceLocator locator) { super(provider, locator, Parameter.Source.UNKNOWN); } @Override protected Factory createValueFactory(Parameter parameter) […]

Dagger 2 – 使用@Named无法正常注入多个相同类型的对象

我的模块: @Module public class TcpManagerModule { private ITcpConnection eventsTcpConnection; private ITcpConnection commandsTcpConnection; public TcpManagerModule(Context context) { eventsTcpConnection = new EventsTcpConnection(context); commandsTcpConnection = new CommandsTcpConnection(context); } @Provides @Named(“events”) public ITcpConnection provideEventsTcpConnection() { return eventsTcpConnection; } @Provides @Named(“commands”) public ITcpConnection provideCommandsTcpConnection() { return commandsTcpConnection; } } 零件: @Component(modules = TcpManagerModule.class) public interface TcpManagerComponent { void inject(ITcpManager tcpManager); […]