各位达人,请问手动创建的对象,是否可以通过@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();谢谢!
class Demo{
@EJB
private MyClass myCl;
private String paramDemo(String param){
this.param = param
}
}如果在代码使用new来创建,而不是由EJB框架来创建,那么能否自动注入MyClass对象。Demo demo = new Demo("p");//myCl.toString();谢谢!
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";
}
}
你写的代码是自己通过反射来创建对象。。我的意思是,通过new创建的对象,其中的字段是否可以由EJB容器(容器管理)来注入。
如果不行的话,我只能通过构造器注入,来传入 MyClass 对象了..
从spring容器中拿出的对象才可以。
看的类名就知道了。我写的类就是模仿ejb容器的。ejb容器就通过反射做的。 你可以下载一个。