我在我的泽西应用程序中使用HK2容器。我需要使用我的自定义工厂方法从HK2容器中获取注入的实例。例如,
// Here I declare the IOC binding.
public class ApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(Logger.class).to(ILogger.class).in(Singleton.class);;
bind(MySqlRepository.class).to(IRepository.class).in(Singleton.class);
}
}
public class MyApplication extends ResourceConfig {
public static ApplicationBinder binder ;
public MyApplication () {
binder = new ApplicationBinder();
register(binder);
packages(true, "com.myapplication.server");
}
}
这是我的代码:
public class BusinessLogic
{
//@Inject
//ILogger logger ;
//Instead
ILogger logger = DependencyResolver .resolve(ILogger.class) // resolve will get ILogger from HK2 container
}
我需要这样做的原因是有时,我手动分配具有依赖关系的类,因此以这种方式每次使用@Inject返回null。例如,如果我使用新的 BusinessLogic() ,则@Inject的记录器为空。我也必须绑定商业逻辑并使用IOC才能获得ILogge。
我需要这样的东西:
public class DependencyResolver {
public static <T> T resolve(Class<T> beanClass){
return instance;
}
}
我需要使用依赖关系解析器才能获取我在“我的应用程序”中注册的实例。
有什么建议吗?预先感谢...
我不是100%确定你到底想做什么,但是...
我认为您误解了AbstractBinder.bind(…)
或bindings本身。此外,如果您不能向一个非托管组件的实例(如您的BusinessLogic
)注入某些内容。
请参阅jersey.java。net-ioc中有关您的BusinessLogic
的示例。您可以查看ComponentProvider和/或
InjectableProvider
对于您的ILogger,我建议创建并绑定一个工厂,如下所示:
public class LoggerFactory implements Factory<ILogger> {
// inject stuff here if you need (just an useless example)
@Inject
public LoggerFactory(final UriInfo uriInfo) {
this.uriInfo = uriInfo;
}
@Override
public ILogger provide() {
// here you resolve you ilogger
return MyLocator.resolve(ILogger.class);
}
@Override
public void dispose(ILogger instance) {
// ignore
}
}
绑定工厂
public class ApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bindFactory(LoggerFactory.class).to(ILogger.class).in(PerLookup.class /* or other scopeAnnotation if needed */);
// what's you Logger.class ?
// bind(Logger.class).to(ILogger.class).in(Singleton.class);
// bind(MySqlRepository.class).to(IRepository.class).in(Singleton.class);
}
}
希望这有所帮助。也许有人愿意为您的案例写一些关于提供者的内容。
我使用'mvn安装'命令,它是推工件到JFROG下libs-释放-本地与group pId,artifactID和版本号。 我的问题是:工件版本是1.2.1,它将替换一个新工件并删除旧工件。我可以将工件推到build_Number下吗? 像Jfrog目标回购中的Ex:libs发布本地/groupIdname/artifactIdname/buildNumber/version(工件)? 输出应该是
我有一个TestNG@Factory类,一个创建驱动程序的基类和两个包含多个@test方法的测试类来运行测试。考虑到我下面的@Factory类。 和是两个测试类。它们扩展基类并调用基类构造函数来创建驱动程序。特定设备ID在特定时间只能使用驱动程序的一个实例。 我面临的问题是IndTest和IndTest2同时运行,测试试图同时在特定设备上运行不同的测试。我要求先调用IndTest类,在设备1和设备
1.1. 工厂烧写工具使用 1.1. 工厂烧写工具使用 工厂烧写工具是一个带UI界面的windows烧写工具,对于一台新电脑需要安装usb驱动(驱动安装文件和说明在leo-k18-universal-glibc/bootx_win/driver_install目录下),同时把需要烧写的镜像复制到bootx_win目录下,如下图所示: 该工具最多支持同时烧写8台Kamino18的设备端,运行烧写工具
考虑一个场景,我想用一些数据获取,并将其解析为特定类型的对象,例如。免责声明:虽然很长,但这是一个sscce;我的实际项目与猫的声音关系不大:) 要求: 第一个字符表示“动物的类型”。所以 可能指抽象, 可能指。 第二个字符可选地表示“动物的亚型”...除了这些子类型被分组到类别中(就类而言)。所以CS可能是ThaiCat扩展Cat与参数“”,可能是扩展Cat与参数,可能是扩展与参数 中包含其他信
我需要将REST API中的数据上传到Cosmos DB,并维护特定时间间隔的项目级别TTL。 我使用ADF复制活动复制数据,但对于TTL,在源端使用了额外的自定义列,硬编码值为30。 注意到时间间隔(秒)更新为字符串而不是整数。因此失败,并出现以下错误。 详细信息 故障发生在“下沉”方面。错误代码=用户错误文档DB写错误,'类型=微软.数据传输.常见.共享.混合交付异常,消息=文档导入失败,由于
为了进行测试,我在模式中添加了以下内容, 之后XJC开始给出以下错误, 不支持的绑定命名空间“http://annox.dev.java.net”。也许您指的是“http://java.sun.com/xml/ns/jaxb/xjc”? xjc-p com.test-classpath=“jaxb2-basics-annotate-1.0.2.jar;tools-0.4.1.5.jar;comm