【问题标题】:Can I inject a dependency into an object which requires data from the object?我可以将依赖项注入需要来自对象的数据的对象吗?
【发布时间】:2012-11-17 00:40:57
【问题描述】:

我有一个用户工厂,它只是从 UserStore 获取用户:

public class UserFactory
{
    @Autowired
    private UserStore userStore;

    public User getUserFromId(String Id)
    {
        User foundUser = this.userStore.findUser(Id);

        return foundUser;
    }
}

这是我的用户对象:

public class User implements Serializable
{
    @Autowired
    private List<Announcer> announcers;  //I want this injected

    private String twitterId;

    private String facebookId;

    public List<Announcer> getAnnouncers()
    {
        //lazy init?
        return this.announcers;
    }

}

announcers 中的每个实例都依赖于相应的服务 ID,例如 twitterIdfacebookId... 我可以在 getter 中懒惰地构建它,但我很好奇是否有办法设置工厂注入它。我也可以公开一个 setter,并在 UserFactory 中设置它......但试图限制曝光。

【问题讨论】:

    标签: java spring ioc-container


    【解决方案1】:

    看看这个链接: http://www.tutorialspoint.com/spring/spring_injecting_collection.htm

    请参阅名为“注入 Bean 引用”的部分。

    我不知道在没有 xml 配置的情况下执行此操作的方法,在这些情况下,我所做的是在 xml 文件中定义要在列表中注入的 itens,然后将 bean 注入到列表中。

    类似:

     <bean id="an1" class="FBAnnouncer"/>
     <bean id="an2" class="TWAnnouncer"/>
     <bean id="user" class="User">
         <property name="announcers">
            <list>
               <ref bean="an1"/>
               <ref bean="an2"/>
            </list>
          </property>
     </bean>
    

    【讨论】:

    • 这不会给每个用户相同的播音员吗?我需要根据每个用户注册的服务为每个用户提供他们自己的播音员
    • 你有要注入的用户列表吗?还是您从数据库中获取它们?如果您有用户列表和每个用户的播音员列表,则可以使用此解决方案。您可以在用户工厂中注入用户列表,就像将播报员注入用户一样。
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多