EJB3.0依赖注入
来源:互联网 发布:淘宝卖家中心登录 编辑:程序博客网 时间:2024/05/16 14:14
依赖注入又称控制反转(IOC),在Spring中我们已经有了一定的了解.依赖注入很大的简化了程序的复杂性. 这篇文章总结在EJB中怎么通过容器来完成Bean的注入.
首先看需要被注入的Bean.
//Bean接口public interface HelloWorld { String sayHello(String str);} //实现@Stateless()@Remotepublic class HelloWorldBean implements HelloWorld { @Override public String sayHello(String str) { return "Hello:" + str; }}
如果不用依赖注入,我们取得bean的方式就是手动通过JNDI进行查找,代码如下:
//通过JNDI来获取HelloWorldpublic interface Jndi { public String sayHello();} @Stateless@Remote@RemoteBinding(jndiBinding= "com/jndi")public class JndiBean implements Jndi { @Override public String sayHello() { HelloWorld helloworld =getHelloWorld(); returnhelloworld.sayHello("jndi"); } public HelloWorld getHelloWorld() { try { InitialContext ctx = newInitialContext(); HelloWorld helloworld =(HelloWorld) ctx .lookup("HelloWorldBean/remote");//通过jndi来获取HelloWorld return helloworld; } catch (NamingException e) { e.printStackTrace(); } return null; }}
这些方法中使用JNDI的语句不好理解,与业务无关,而且容易误导。
依赖注入与JNDI相反,依赖注入让只需要我们声明依赖,当需要请求资源时,由java EE容器处理资源或服务的实例化和初始化。基于使用注释或部署描述符的资源声明.
简单来说,JNDI和依赖注入的操作方向不一样,JDNI是我么自己去找Bean,而依赖注入是由容器将我们需要的Bean注入推送给我们.下面这张图说明了JNDI与依赖注入的区别.
下面来看通过注解使用依赖注入方式获取Bean的方法
一.通过@EJB()注解来存取
//接口public interface Injection { String sayHello();}
(1)第一种方式:使用beanName属性指定EJB的类名(不带包名)
@Stateless@Remote@RemoteBinding(jndiBinding= "com/injection")public class InjectionBean implements Injection { @EJB(beanName="HelloWorldBean")//beanName指定EJB的名称(如果@Stateless或@Stateful没有设置过name属性,默认为不带包名的类名) private HelloWorld helloworld; @Override public String sayHello() { return helloworld.sayHello("依赖注入"); }}
(2)第二种方式:使用注入对象的setter方法,在第一次使用之前进行注入
@Stateless@Remote@RemoteBinding(jndiBinding= "com/injection")public class InjectionBean implements Injection { private HelloWorld helloworld; @EJB(beanName ="HelloWorldBean")//容器会在属性第一次使用之前,自动的用正确的参数调用bean的Setter方法 public void setHelloWorld(HelloWorldhelloworld) { this.helloworld = helloworld; } @Override public String sayHello() { return helloworld.sayHello("注入者"); }}
(3)第三种方式: 使用mappedName指定Bean实例的JNDI名
@Stateless@Remote@RemoteBinding(jndiBinding= "com /injection")public class InjectionBean implements Injection { @EJB(mappedName=" HelloWorldBean/remote")//mappedName指定EJB的全局JNDI名 private HelloWorld helloworld; @Override public String sayHello() { return helloworld.sayHello("注入者"); }}
二. 通过@ Resource ()注解来存取
@EJB 注解只能注入EJB存根对象,除@EJB 注释之外,EJB 3.0 也支持@Resource注释来注入来自JNDI 的任何资源。
如果JNDI 对象在本地(java:comp/env)JNDI目录中,我们只需给定他的映谢名称即可,不需要带前缀
如下面例子注入一个消息connection factory和一个messaging queue
@Resource(mappedName="ConnectionFactory")QueueConnectionFactoryfactory;@Resource(mappedName="queue/A")Queue queue;
- EJB3.0 依赖注入
- EJB3.0依赖注入
- EJB3.0依赖注入
- EJB3.0依赖注入深入
- EJB3.0的依赖注入
- EJB3.0开发指南:依赖注入
- EJB3.0开发指南:依赖注入
- EJB3.0依赖注入深入2
- EJB3.0依赖注入深入3
- EJB3.0中依赖注入和截获器概念
- EJB3.0学习笔记之四 依赖注入(dependency injection)
- EJB3.0开发指南:依赖值对象
- EJB3.0开发指南:依赖值对象
- yii2.0依赖注入
- angular2.0依赖注入
- jboss7搭载EJB3之简单会话BEAN与依赖注入jboss数据源
- EJB3.0变通实现定时任务quartz,schedule ,task,EJB3.0注入Quartz无法注入,注入失败,NullpiontException
- 依赖注入
- forward list源码
- Frequently values UVA11235
- hdu 4541 Ten Googol
- 基础知识总结
- jquery内容过滤选择器
- EJB3.0依赖注入
- 常用标签
- jquery可见性过滤选择器
- JSP的内置对象(request)
- 第一次面试
- jquery属性过滤选择器
- 两分钟让你明白什么是ERP!——把专业的问题通俗化!(经典中的经典)
- 浅析synchronized关键字
- linux下杀死进程全权讲解