首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以注入一个动态创建的对象吗

我可以注入一个动态创建的对象吗
EN

Stack Overflow用户
提问于 2012-04-19 03:03:21
回答 4查看 1.1K关注 0票数 3

我有一个关于依赖注入的问题。

我有一节课,比如说:

代码语言:javascript
复制
class MyClass {
    MyServiceAPI serviceAPI;
    public setSession(Session session) {
         serviceAPI = new MyServiceAPI(session);     
    }
    ....
}

会话是由另一个类创建的,该类在运行时从数据库加载会话。

代码语言:javascript
复制
class MyAnotherClass {
    Myclass myClass;

    @Inject
    MyAnotherClass(MyClass myClass) {
        this.myClass = myClass;
    }

    public someFunction() {
        String key = <read from database>;
        Session session = new Session(key);
        myClass.setSession();
        ......
    }
}

如前所述,MyClass实例被注入到MyAnotherClass中,而MyClass中的serviceAPI实例是使用new创建的。如果我想将ServiceAPI注入MyClass,我可能可以在创建会话的类中创建它,并使用设置器将其设置为MyClass。

但问题是,我真的不想让MyAnotherClass创建MyServiceAPI并将其注入到MyClass中。我不想让MyAnotherClass知道MyServiceAPI的存在。

有没有办法使用像Guice或Spring这样的depdendency注入器来做这件事?或者仅仅是Java?

非常感谢。

EN

回答 4

Stack Overflow用户

发布于 2012-04-19 03:18:57

如果您希望用纯Java进行依赖注入,可以通过内置的Java服务提供者接口从Java6开始提供一些支持。尽管它需要对jar文件等进行一些处理。看一看 here for Java SPI

票数 1
EN

Stack Overflow用户

发布于 2012-04-19 03:43:31

可能的解决方案与guice和一个简单的工厂。MyServiceAPI可以是一个接口。

代码语言:javascript
复制
public class MyClass {

    @Inject
    private MyServiceFactory factory;
    private MyServiceAPI myServiceAPI;

    public void setSession(Session session) {
        myServiceAPI = factory.createMyServiceAPI(session);
    }
}

public class MyServiceFactory {

    MyServiceAPI createMyServiceAPI(Session session) {
        // create with new, inject via Injector, do what you want... :)
        return <yourobject>;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-04-19 03:52:25

你只需要用一个很好的老式工厂就行了。

代码语言:javascript
复制
class MyAnotherClass {
    MyClassFactory myClassFactory;

    @Inject
    MyAnotherClass( MyClassFactory myClassFactory ) {
        this.myClassFactory = myClassFactory;
    }

    public void someFunction() {
        String key = "1"; // read from DB
        myClass = myClassFactory.getMyClass( key );
    }
}

class MyClassFactory {
    public MyClass getMyClass( String key ) {
        Session session = new Session( key );
        MyClass myClass = new MyClass();
        myClass.setSession( session );
        return myClass;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10216166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档