privateなフィールドにDI ?

JBossの4.0.3 RC1を使ってチュートリアルのコードをちょっと変更したものを動かしてみる。privateなフィールドにDIできてしまうんですけどコレって普通なんでしょうか?気になる。

インタフェース

public interface Calculator {
	int multi(int x, int y);
}
public interface ShoppingCart {
	int buy(int price, int qty);
}


Stateless Session Beans

@Stateless
@Remote(Calculator.class)
public class CalculatorBean implements Calculator {
	public int multi(int x, int y) {
		return x * y;
	}
}
@Stateless
@Remote(ShoppingCart.class)
public class ShoppingCartBean implements ShoppingCart {

	@EJB 
	private Calculator calculator;

	public int buy(int price, int qty) {
		return calculator.multi(price, qty);
	}
}


クライアント

public class Client {
	public static void main(String[] args) throws Exception {
		InitialContext ctx = new InitialContext();
		ShoppingCart s = (ShoppingCart) ctx.lookup(ShoppingCart.class.getName());
		
		System.out.println(s.buy(100,2));  
	}
}


結果

200


その他

  • @Localってうまく動かない。未実装?
  • @EJBのnameとbeanNameの使いわけ方がよくわからない。