各位达人,请问手动创建的对象,是否可以通过@EJB注解来注入对象。。例如
class Demo{
@EJB
private MyClass myCl;
private String paramDemo(String param){
this.param = param
}
}如果在代码使用new来创建,而不是由EJB框架来创建,那么能否自动注入MyClass对象。Demo demo = new Demo("p");//myCl.toString();谢谢!

解决方案 »

  1.   


    package sh.pl;import java.lang.annotation.Annotation;
    import java.lang.reflect.Field;import javax.ejb.EJB;public class TestEJBContainer { public static void injectEJB(Object obj) throws IllegalArgumentException, IllegalAccessException, InstantiationException {
    if (obj == null) return;
    Field fields[] = obj.getClass().getDeclaredFields();
    for (Field f : fields) {
    Annotation a = f.getAnnotation(EJB.class);
    if (a != null) {
    //注入
    f.setAccessible(true);
    f.set(obj, f.getType().newInstance());
    f.setAccessible(false);
    }
    }

    }

    public static void main(String[] args) {
    Demo demo = new Demo("p");
    try {
    injectEJB(demo);
    System.out.println(demo.getMyCl().toString());
    } catch (Exception e) {
    e.printStackTrace();


    }
    }
    几个用来测的类package sh.pl;import javax.ejb.EJB;public class Demo { @EJB
    private MyClass myCl;
    private String param; Demo(String param){
    this.param = param;
    } public MyClass getMyCl() {
    return myCl;
    } public void setMyCl(MyClass myCl) {
    this.myCl = myCl;
    } public String getParam() {
    return param;
    } public void setParam(String param) {
    this.param = param;
    }
    }package sh.pl;public class MyClass { public String toString() {
    return "MyClass's toString";
    }
    }
      

  2.   

    非常感谢你的回复。。不过你可能没弄清我的意思。。
    你写的代码是自己通过反射来创建对象。。我的意思是,通过new创建的对象,其中的字段是否可以由EJB容器(容器管理)来注入。
    如果不行的话,我只能通过构造器注入,来传入 MyClass 对象了..
      

  3.   

    不可以。
    从spring容器中拿出的对象才可以。
      

  4.   


    看的类名就知道了。我写的类就是模仿ejb容器的。ejb容器就通过反射做的。 你可以下载一个。