Eva
Java粉絲募集中
  • 簡介
  • 我們的優勢
  • 最新消息
  • 下載與使用
  • 範例與說明
    • Eva Objects >
      • Bean類別定義
      • Entity型別定義
      • Struct型別定義
      • 建立Entity空白物件
      • 建立Entity修改物件
      • 建立Entity條件物件
      • 建立Struct值物件
    • Eva_ORM >
      • ORM程式主體
      • 使用條件物件執行操作
      • 執行更複雜條件的操作.
      • 分頁取回資料
      • 操作JDBC的參數
      • Array Property的操作
      • Collection Property的操作
      • 更複雜的Collection Property
      • 指定表格名稱
      • 新增資料庫Dialect
    • Eva_IOC >
      • IOC程式主體
      • AOP應用
    • Eva_Struct >
      • Struct範例
      • Bit Strcut範例
      • 指標範例
      • 於Eva_ORM中使用
    • Eva_Sort >
      • 依指定Properties排序
      • 部份排序
      • 優先排序部份
    • Eva_Cache >
      • hashing-based cache
      • 非hashing-based cache
  • API列表
  • 技術支援
    • 協助開發
  • 相關書籍

IOC程式主體.

Eva_IOC提供了一個物件建立的機制, 若使用者是透過Eva_IOC去建立物件的, 則用於建立該物件的實際類別, 就可以透過Eva_IOC的設定檔機制, 在程式佈署完之後再次做更改.

若己知被編譯好並且可以使用Java程式為 :
package com.logntw.eva.ioc;

public interface Inf
{
  String test();
}
package com.logntw.eva.ioc;

public class InfA implements Inf
{
  @Override
  public String test()
  {    
    return "InfA";
  }
}
package com.logntw.eva.ioc;

public class InfB implements Inf
{
  @Override
  public String test()
  {    
    return "InfB";
  }
}
若執行環境中, 加入有設定檔 /setting/com.logntw.eva.ioc.InfB 如下 : 
package com.logntw.eva.ioc;

import com.logntw.eva.anno.reflect.FactoryMethod;

public final class InfB_replacement implements Inf
{
	@Override
	public String test()
	{		
		return x;
	}

	private final String x;
	private InfB_replacement()
	{
		this.x = "InfB2";
	}
	
	public InfB_replacement(String x)
	{
		this.x = x; 
	}
	
	@FactoryMethod
	public static InfB_replacement getInstance()
	{
		return new InfB_replacement();
	}
}

則在程式執行時, 會用InfB_replacement類別取代InfB類別來建立物件, 則下面程式可被正確執行.
package com.logntw.eva.ioc;

import junit.framework.Assert;

import org.junit.Test;

public class ObjectFactoryTest5
{    
  @Test
  public void testClzResources() throws Exception
  {
    ObjectFactory objectFactory = DefoObjectFactory.getInstance();
              
    Inf a = objectFactory.getInstance(Inf.class, InfA.class);
    Inf b = objectFactory.getInstance(Inf.class, InfB.class);
    Inf b2 = objectFactory.getInstance(Inf.class, InfB.class, "B2");
          
    Assert.assertEquals(a.test(), "InfA");
    Assert.assertEquals(b.test(), "InfB2");  // InfB.class has been replaced by /setting/com.logntw.eva.ioc.InfB!
    Assert.assertEquals(b2.test(), "B2");
  }  
}
Powered by Create your own unique website with customizable templates.