初试Guice

4 篇文章 0 订阅
最近有空试用了一下Guice,感觉还是比较小巧的,在上面做了个类似Tapestry的Configuration,利用它可以实现类似扩展点的功能。 (可以参考http://tapestry.apache.org/tapestry5/tapestry- ioc/configuration.html)
另外关于网上代码和XML的配置的问题,个人认为不是问题。基于代码的配置就象一个核,如果你喜欢基于XML的配置,只要自己写一个模块,读取XML并使用其中的信息再用基于代码的配置去配置即可,只是基于使用@Inject Annotation 的地方稍微难处理点,但也只需要动态生成类也可以解决这个问题。


使用的时候参考以下这个测试用例:

public class GuiceTest extends TestCase {
    public static class ContributorUsingContributorClass extends
            ContributableModule {
        @Override
        protected void configure() {
            contribute(new AbstractContributor() {
                @Inject
                @ConfigFor(AnotherInterface.class)
                OrderedConfiguration<String> orderedConfiguration;
                @Inject
                @ConfigFor(AnotherInterface.class)
                Configuration<String> unorderedConfiguration;
                @Inject
                @ConfigFor(Service.class)
                MappedConfiguration<String, Runnable> configuration;

                @Inject
                public void contribute() {
                    configuration.add("abcd", new Runnable() {
                        public void run() {
                        }
                    });
                    unorderedConfiguration.add("abc");
                    orderedConfiguration.add("my", "abc");
                }
            });
        }
    }

    public void testClient() {
        Injector injector = Guice.createInjector(new MyModule());
        Client client = injector.getInstance(Client.class);
        MockService mock = (MockService) injector.getInstance(Service.class);
        client.go();
        assertTrue(mock.isGone());
    }

    public void testConfigurationThroughContributorClass() {
        Injector injector = Guice.createInjector(new MyModule(),
                new ContributorUsingContributorClass());
        MockService mock = (MockService) injector.getInstance(Service.class);
        Map<String, Runnable> map = mock.getConfigMap();

        assertNotNull(map);
        assertEquals(1, map.size());
    }

    public void testUnorderedConfiguration() {
        Injector injector = Guice.createInjector(new MyModule(),
                new ContributorUsingContributorClass());
        MockService mock = (MockService) injector.getInstance(Service.class);
        Collection<String> config = mock.config;

        assertNotNull(config);
        assertEquals(1, config.size());
        assertEquals("[abc]", config.toString());
    }

    public void testOrderedConfiguration() {
        Injector injector = Guice.createInjector(new MyModule(),
                new ContributorUsingContributorClass());
        MockService mock = (MockService) injector.getInstance(Service.class);
        Collection<String> config = mock.orderedConfig;

        assertNotNull(config);
        assertEquals(1, config.size());
        assertEquals("[abc]", config.toString());
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值