【问题标题】:Guice bind toInstance equality in Spring Dependency InjectionGuice 在 Spring Dependency Injection 中绑定 toInstance 相等性
【发布时间】:2014-01-14 14:45:21
【问题描述】:

我将举例说明情况。例如,我有一个设置类,我正在那里配置一些主机名、端口信息。喜欢:

public class Settings {

@Inject
private User user;

我可以通过以下方式处理这个问题:

 private Injector injector;

 public void setInjector(){
 injector=Guice.createInjector( new AbstractModule(){
 @Override
        protected void configure(){
               bind( User.class ).toInstance(user);
        }
 }
}

当有人使用@Inject User user 时,我的代码只给他我的实例,我的意思是,无论开发人员使用 Inject 创建用户实例,都只有一个用户实例。

我如何在春天实现这一目标,有人可以解释一下吗?

请注意:我只知道有一个 @Autowired 注释,但如何实现这一点令人困惑:S

提前致谢

顺便说一句:我无法理解提到here

【问题讨论】:

  • 你想让 Spring 为你的用户对象创建多个实例吗?如果是这样,请尝试“@Inject”和“@Dependent”。我不认为那是你要找的东西。如果您希望在任何地方都使用相同的用户,您需要在某个地方定义 bean,在 java 配置类中或通过 xml docs.spring.io/spring/docs/3.2.4.RELEASE/… java 配置需要 @Configuration 和一些用于在 xml 中扫描的设置。澄清您在寻找什么,我可能会提供帮助。
  • 我总是希望到处都有相同的配置用户对象,你能否解释更多关于@Configuration 以及我如何使用的信息。我刚试了一下,没成功。

标签: java spring dependency-injection guice


【解决方案1】:

如果这是一个 Web 应用程序,您想使用 Spring 安全性之类的东西并使用会话范围的对象来控制提供给表单的用户。

否则,您可以这样做:

@Configuration
public class XYZConfig {

    @Bean(name="User")
    public User getUser() {
        return new User();
    }
}

在您的 Spring 应用程序上下文中,您需要执行以下操作:

<context:component-scan base-package="com.xyz" />

Spring boot 有很多你可能需要做的基本示例:

https://spring.io/guides/gs/spring-boot/

【讨论】:

  • 我将在明天对其进行测试,但我会将代码 new User 更改为我配置的 User 实例。但在那之后我怎么能检索这个用户实例?带有@Autowired 注释?
  • 它应该与“@Inject”一起使用,Spring 将其视为与“@Autowired”相同 您真的不希望每个登录的用户都相同,但这应该可以帮助您入门. 至少,你会想要用“@Scope(value = "session")”注释getUser方法,但是你需要设置一个用户服务和一切,但我可​​能将我的约束分配给您的问题。实际上,如果是 Spring Web 应用程序,请使用 Spring Security。
  • 不是WEB APP!!我应该在我的用户类中添加一些特别的东西吗?像@Service 还是别的什么?
  • 当我在其他地方使用@Autowired User 用户类时,它是NULL!
猜你喜欢
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多