问题标签 [custom-scope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
70 浏览

cdi - CDI 中的自定义范围似乎需要 beans.xml

我在 CDI 中创建了一个自定义范围。

仅当我beans.xml在部署中使用时才有效。这是必须的吗?

0 投票
1 回答
568 浏览

android - Dagger 2 的作用域可以短于 Activity 寿命吗?

我一直在查看 Dagger 2 中的自定义范围(thisthis是我试图将我的代码作为基础的那些),还有一件事我似乎仍然无法理解,我看到你可以创建一个具有自定义范围的组件,然后该组件包含的模块的所有提供形式将与组件的范围相同(组件中的单例)或无范围的,每次获得一个时都会返回新实例。

但是,我仍然不明白的是,如果你有一个用户范围,然后你有一些模块绑定到该范围,假设你的网络组件与之绑定,以便网络调用使用当前用户信息,如果您在 Activity 生命周期中注销用户(或登录用户),是否会更改您当前标记为 @Inject 的对象引用?或者当您在活动 onCreate 方法中调用 .inject(this) 时获得的任何实例?或者您应该再调用一次 inject 以便再次映射引用?

非常感谢您对此事的任何帮助:)

0 投票
0 回答
473 浏览

spring - 您如何传递参数并导航到具有自定义范围的 Spring 托管 bean - 视图?

我想先给你一些背景信息。

上下文

我目前正在使用 Spring 框架开发一个 Web 应用程序,我想在其中为用户提供在单独的选项卡中显示/编辑相同实体类型模型的不同实例。为了显示和检索这些实体的属性,我使用 Spring 托管 bean和匹配的数据传输对象实例以及服务层接口实现的@Autowired 注释实例来持久化数据。

因为我经历过,Spring 的会话范围 bean适合多选项卡编辑,并且请求范围 bean 不能保存提交的数据“足够长”以重新显示所以我实现了一个“自定义”范围视图 bean。这似乎适用于显示和编辑多个相同类型的页面(及其上的实体)以及只要 bean 的操作方法返回 void/null 就保存数据。

页面之间的导航目前是通过 bean 操作方法上目标页面的 String 类型返回值来完成的,该方法发送到 h:commandLink 和 h:commandButton 等组件,由 JSF 或使用简单的 html 链接解析。

问题

您如何使用一个 h:link/h:button 导航到另一个页面,并在页面登陆后将其参数传递给 Spring 视图范围 bean 显示?

有没有办法,首先如何重定向到另一个页面 - 例如从具有系统用户列表的页面,然后显示从启动页面传递的用户的详细信息?

需要回答的问题和可能的解决方案?

如果我已经正确理解并实现了它,它们已经被 Spring 管理和注入,所以它们不能像 JSF 的 ViewScoped bean 一样工作,所以我不能轻松地使用它们的属性注释为 JSF 管理并传递它们的参数值以在 a 上显示它们导航到它之后的详细信息/编辑页面。当我尝试它时,它会导致“CDI @ViewScoped bean 功能不可用”错误消息。我认为,出于同样的原因,使用 @ManagedBean 注释的 JSF bean 并且目标页面上的 f:viewParam 不起作用。那是对的吗?

我尝试使用目标页面的返回值将参数传递给 Spring 视图范围 bean 的函数,但显然(?) bean 在登陆它并清空参数后重新创建。尝试使用 void 返回类型和登录页面名称为 Spring 视图范围 bean 的操作定义导航规则也不起作用。似乎在 faces-config.xml 中无法识别 Spring bean。是这样吗?

我应该使用一些寿命更长的 Spring bean 的方法来调用具有正确参数的视图范围的构造函数吗?但是如何在重定向后阻止视图范围 bean 的重新创建?

从视图范围切换到会话范围可以解决我的问题,但它会导致糟糕的用户体验,正如我所看到的那样,我的应用程序应该如何处理同一用户的多个相同类型实例的选项卡。

在我看来,从 url 地址通过视图范围 bean 传递和检索安全参数可能不是最佳安全实践。但我也在 UI、服务层和 url 拦截中使用 Spring Security 角色,以及在我的服务方法上使用 AOP 来检查检索数据的所有者。在 url 中使用一些数据标识符是唯一可行的解​​决方案吗?从安全性的角度来看,它是比使用会话范围 bean 更差/更好的解决方案吗?

我欢迎并感谢您给我的每一个建议,因为这是我的第一个 Spring 宠物项目,我正在学习中。

0 投票
1 回答
57 浏览

java - 如何创建提供类似于会话范围的bean的客户弹簧范围?

需要定义 Spring 范围,该范围将为 bean 提供代理,并在事件发生时重新加载/重新创建目标 bean。该行为类似于会话 bean,除了没有 http 会话。

Spring 是否为这种 bean 代理和范围操作提供了一种方法?

更新

假设需要更改externalUrl用于发送 http 请求的哪个。所以应用程序必须切换到新的 bean 并创建新的 http 连接池。

当 bean 直接自动装配时,不可能重新创建它,尤其是在许多地方使用它时。所以我搜索了一些方法来注入一个代理而不是它,并在不改变调用者代码的情况下重新创建目标实例。

0 投票
1 回答
193 浏览

java - 在自定义范围内使用注入

是否可以将@SessionScopedbean 用作自定义范围的 Context 中的字段?

我正在使用 CDI 编写自定义范围(“ScreenScoped”),因此它与 CDI 的行为大致相同@ViewScoped(我这样做是因为后者不兼容 WebSphere)。到目前为止,我的范围就像@ApplicationScoped这样。我想使用我的@SessionScoped NavigationHandler类(每次用户单击链接或按钮时调用)来确定我的 ScreenScoped 生命周期何时结束。但是,当我尝试使用@Injected 字段时,我确实遇到了错误。

由于以下原因出现 NullPointerException @Inject

第 38 行是我第一次调用注入字段:

0 投票
1 回答
168 浏览

hash - BeanManager 总是返回相同的引用

我正在创建一个自定义 CDI 范围,并使用它BeanManager来注入我的NavigationHandler自定义类。但是它返回的豆子很奇怪。

所以我以这种方式使用 BeanManager :

我希望,当我使用两个不同的浏览器使用我的项目时,会得到两个不同NavigationHandler的,它们是这样定义的:

但是我的调试器true在我测试时返回reference1==reference2。我也得到奇怪的哈希码:

我不明白为什么 toString() 中使用的哈希值不同,但 hashCode() 中使用的哈希值是相同的。

0 投票
1 回答
640 浏览

android - 使用 Dagger 2 和自定义范围进行 Espresso 测试

在最近迁移到 Dagger 2 之后,我正在开发的应用程序对每个功能都使用了 @ActivityScope。每个应用程序功能都使用 MVP 模式实现,并具有自己的本地 dagger 组件设置,该设置依赖于应用程序组件,以获取在整个应用程序生命周期中所需的依赖项(由应用程序提供)。每个功能的 Activity 都扩展了一个基类,该基类将主应用程序组件提供给一个方法,该方法被每个 Activity 覆盖,以设置本地 dagger 组件(构建本地组件并实例化本地模块)。

我要解决的问题是如何将模拟注入到被测活动中。我遇到的主要问题是我无法在运行时将原始本地组件和相应的模块与模拟的模块交换。我读过很多关于使用 Dagger 2 进行 Espresso 测试的文章,但它们并没有促进清洁架构。在大多数情况下,他们依赖 AppComponent 来注入所有活动,在我的例子中,每个功能的组件都负责注入自己的活动。

到目前为止,我想出的最好的方法是引入一个组件构建器,它仅作为测试设置的一部分进行初始化,如果初始化,则在 Activity 代码中使用此设置,否则设置真正的组件。但是,我不愿意混合生产和测试代码。这是代表 Dagger 设置的示意图: Dagger 2 Setup

0 投票
1 回答
77 浏览

jsf - JSF 自定义范围 - 缺少 javascript

我想在 JSF 应用程序中配置自定义范围。我们在 Websphere 8.0/8.5 上使用 JSF 2.0 和 Primefaces 5.3.17。现在我们有带有命名注释的 RequestScoped Core- 和 SessionScoped Model-Beans。模型通过 Inject 传递给 Core。现在我们需要提供一种在许多浏览器选项卡上并行处理模型的方法。我们的想法是使用过滤器将生成的选项卡 ID 注入到响应中,然后从发布请求中提取它并将其传递给 Extension 以从地图加载/创建所需的 bean,每个视图的 bean 存储在会话中。我想过滤器工作正常 - 没有范围更改,生成的选项卡 ID 被注入表单等的操作属性中,并且没有错误。

但问题是,当我为某些模型 bean 设置新的自定义范围以证明它是否有效时。我遇到了一个例外,即“未定义 jquery”。对我来说,Java 部分看起来不错 - 在上下文中创建所需的 bean,然后在核心中使用相同的 bean。但事实证明,每个负责加载 js 的请求都会得到空响应。我没有看到任何堆栈跟踪,我完全不知道它为什么会发生,我如何以及在哪里可以找到导致这种行为的原因。

一些代码示例:

语境:

延期:

范围:

任何人都知道这个问题如何与范围更改联系起来以及如何解决它?在此先感谢您的帮助。

0 投票
1 回答
112 浏览

jakarta-ee - CDI 扩展类使 Wildfly 容器 bean 发现失败

在准备添加自定义 CDI 范围时,我添加了一个实现 CDI spi 扩展接口的类。该类中没有代码:

简单地将类包含在部署中会导致所有其他 CDI bean 发现失败。我没有添加任何其他代码或文件。显然 Wildfly 会扫描部署以寻找扩展,但我无法弄清楚为什么只包含该类会导致其余的注入失败。我在 Java EE 或 Weld 文档中没有发现任何有用的信息。我尝试在 bean 发现事件之前和之后添加 Observables,并尝试将 javax.enterprise.inject.spi.Extension 文件添加到部署中。这些似乎都没有什么不同。

任何帮助表示赞赏。

0 投票
2 回答
1478 浏览

kotlin - Dagger 2 Kotlin - @Binds 方法的 @Named 限定符

我想为从@Binds 方法返回的对象使用@Named 限定符,但我注意到这只能通过静态提供方法实现,而在实际实现中我无法弄清楚。所以下面是我想要实现的。

我有一个自定义 UserScope,它将包含用户登录后的所有活动/片段/viewModel,我在 AuthViewModelModule 中有 LoginViewModel,在 UserViewModelModule 中有另一个 VM,VMModule 都绑定 VMProvider.Factory,因此我需要有 @Named 限定符VMFactory 实例,所以我可以在各自的活动/片段中注入 @Named 。