當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
guice spring_Spring vs Guice:重要的一个关键区别
生活随笔
收集整理的這篇文章主要介紹了
guice spring_Spring vs Guice:重要的一个关键区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
guice spring
根據(jù)彈簧對象的名稱識別它們 不管使用XML還是Java配置都沒有關系,Spring范圍大致類似于Map <String,Object>結(jié)構(gòu)。 這意味著您不能有兩個名稱相同的對象 。 為什么這是一件壞事? 如果您的大型應用程序具有許多@Configuration類或XML文件,則很容易意外地兩次使用相同的名稱。 最糟糕的部分是,將它們與多個對象一起使用時,它們會默默地相互覆蓋,直到在ApplicationContext中僅實際保留一個對象為止。 這些對象也可以具有不同的類型,而聲明順序才是真正確定哪個對象獲勝的因素。 這里的問題是,如果要基于Spring創(chuàng)建可重用的模塊,則基本上將被迫在名稱或其他名稱中使用前綴,以確保不會出現(xiàn)名稱沖突。 Guice對象根據(jù)其類別進行識別 Guice范圍基本上類似于Map <Class <?>,Object>結(jié)構(gòu)。 這意味著如果不使用額外的元數(shù)據(jù)(例如,限定詞), 就不能擁有兩個相同類型的對象 。 這種設計選擇各有利弊,但總的來說,我認為這是比較明智??的選擇。 如果創(chuàng)建可重用的模塊,則必須確保不導出任何通用類型的對象(例如String)。 使用基于類型的作用域,您始終可以為常見類型創(chuàng)建一個包裝的類,而使用基于名稱的作用域,您將始終不得不根據(jù)幸運的猜測使用唯一的名稱。 Guice還具有PrivateModules,因此您可以對所有注入使用Guice,但僅導出范圍中的某些對象。 ? 范例程式碼 這是一個Spring應用程序的幼稚示例,由于靜默Bean覆蓋而中斷了運行時。Main.java
此類實例化應用程序上下文,注冊配置類并嘗試從上下文中獲取MyBean。
package springbreak;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();ctx.register(GoodConfig.class);ctx.register(EvilConfig.class);ctx.refresh();ctx.start();System.out.println(ctx.getBean(MyBean.class).getValue());ctx.stop();} }MyBean.java
這只是我們期望從應用程序上下文中獲得的一種示例類型的Bean。
package springbreak;public interface MyBean {String getValue(); }GoodConfig.java
這是一個導出MyBean的配置類
package springbreak;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class GoodConfig {private static class MyBeanImpl implements MyBean {public String getValue() {return "I'm a bean";}}@Beanpublic MyBean myBean() {return new MyBeanImpl();}}EvilConfig.java
此配置類導出名為myBean的String。 這不是一個非常現(xiàn)實的示例,但顯示了基本思想。
package springbreak;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class EvilConfig {@Beanpublic String myBean() {return "I'm a string!";}} 分析例子 您可以猜測運行示例時會發(fā)生什么嗎? 這是基本思想:參考: Spring vs Guice: Jawsy Solutions技術博客博客上我們JCG合作伙伴 Joonas Javanainen 的一個重要差異 。
翻譯自: https://www.javacodegeeks.com/2012/06/spring-vs-guice-one-critical-difference.html
guice spring
總結(jié)
以上是生活随笔為你收集整理的guice spring_Spring vs Guice:重要的一个关键区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软 Visual Studio Cod
- 下一篇: CUBA平台正在开源