ejb java_EJB继承与Java继承不同
ejb java
尽管EJB继承有时使用Java继承,但事实并非总是如此。 就像您在我以前的文章中可以读到的那样 ,EJB不必实现任何接口即可公开业务接口。
反之亦然-仅仅是因为EJB实现了某个接口或扩展了其他EJB,并不意味着它公开了全部或任何视图。
假设我们要具有一些公开远程业务接口的基本EJB。 然后,我们想扩展此EJB并覆盖远程业务方法。
没什么好看的,对吧? 但是,让我们看一些例子。
远程业务接口:
public interface RemoteA {void remoteA();
}
基本EJB:
@Stateless
@Remote(RemoteA.class)
public class SuperclassEJB implements RemoteA { public void remoteA() {// Some basic code that can be overriden.}
}
上面的SuperclassEJB
是我们的基础EJB。 它通过一种方法公开了一个远程业务接口。 现在,让我们转到EJB的子类:
案例1 – Java继承
@Stateless
public class SubclassEJB1 extends SuperclassEJB {// 'remoteA' is not EJB business method. EJB inheritance is strictly for implementation reusing.
}
SubclassEJB1
是一个EJB –可以肯定。 但是它公开了哪些接口? 因为EJB组件必须显式定义其定义的业务接口,所以我们的EJB根本没有任何实际的业务方法! 它是新的,全新的无接口视图EJB。
这意味着,如果在您的代码中,您将执行以下操作:
@EJB SubclassEJB1 myEJB
它将注入没有业务方法的无接口视图EJB。@EJB(name='SubclassEJB1') RemoteA myEJB
它将拒绝进行此注入,因为RemoteA
不是我们EJB的业务接口。
有趣的是–如果不是使用@EJB
进行容器注入,而是进行如下查找:
RemoteA subclassEJB1 = (RemoteA) initialContext.lookup('java:module/SubclassEJB1');
subclassEJB1.remoteA();
它不会引发任何异常并正确调用remoteA()
方法。 为什么? 因为我们真正查找的是EJB的无接口视图。 然后,我们将其转换为RemoteA
(从纯Java角度来看这是正确的),并调用了无接口视图方法。 我想您会同意这会造成很大的混乱–我们没有使用远程接口,而是最终正确调用了本地bean方法。
案例2 –接口实现的Java继承
@Stateless
public class SubclassEJB2 extends SuperclassEJB implements RemoteA {// 'remoteA' is correctly exposed as EJB business method BUT as an implicit local i-face. // Method implementation is correctly inherited.
}
现在看起来真的很奇怪。 我们的EJB扩展了其他EJB并实现了远程业务接口,对吗? 好吧,不完全是。 我们正在实现纯Java RemoteA
接口。 该接口本身没有@Remote
批注, SuperclassEJB
也没有。 这意味着我们要将RemoteA
公开为本地业务接口 。 这是我以前的文章中讨论的EJB的默认行为之一。
这意味着,如果在您的代码中,您将执行以下操作:
@EJB(name='SubclassEJB2') RemoteA myEJB
将使用本地业务接口。 搞砸了,你不觉得吗?
案例3 –具有接口实现和视图声明的Java继承
@Stateless
@Remote(RemoteA.class)
public class SubclassEJB3 extends SuperclassEJB {// Method 'remoteA' is correctly exposed as EJB business method (thanks to @Remote on EJB). // Method implementation is correctly inherited.
}
这是EJB扩展的正确示例。 我们已经正确地重用了Java继承的实现,实现了EJB远程业务接口,并使用@Remote
公开了它。 甚至不需要implements
子句– @Remote
就足够了。 但是,@ @Remote
部分至关重要。
这意味着,如果在您的代码中,您将执行以下操作:
@EJB(name='SubclassEJB3') RemoteA myEJB
它将正确使用远程业务接口。
结论
如您所见,EJB继承有时可能不如预期的那么容易。 它要求您了解组件和视图定义的基础。 默认情况下,组件继承显然是为了代码重用,而不是组件扩展。 没有这些知识,您可能会遇到一些非常奇怪和令人沮丧的问题。 所有示例都在JBoss AS 7.1.1上进行了测试。
参考: EJB继承与Java继承不同 ,我们的JCG合作伙伴 Piotr Nowicki在Piotr Nowicki的首页博客中进行了介绍。
翻译自: https://www.javacodegeeks.com/2013/03/ejb-inheritance-is-different-from-java-inheritance.html
ejb java
ejb java_EJB继承与Java继承不同相关推荐
- EJB继承与Java继承不同
尽管EJB继承有时使用Java继承,但它们并不总是相同的. 就像您在我以前的文章中可以读到的那样 ,EJB不必实现任何接口即可公开业务接口. 另一种方法也是正确的-仅仅是因为EJB实现了某个接口或扩展 ...
- java 继承 意义_Java中继承,类的高级概念的知识点
1.继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2.继承的优点 A.代码的可重用性 B.子类可以扩展父 ...
- java继承详解加练习题
继承 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 继承的好处 提高了代码的复用性(多个类相同的成员可以收到同一个类中) 提高了代码的维护性 ...
- java继承对象转换_java 继承的基础(转)
java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...
- java继承类大全_Java 面向对象继承部分(示例代码)
被继承的类称为父类(超类),继承父类的类称为子类(派生类) 通过继承可以实现代码重用 子类拥有父类非 private 的属性.方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以 ...
- java继承的知识点_Java知识点梳理——继承
1.定义:继承允许创建分等级层次的类,就是子类继承父类的特征行为,使得子类对象具有父类实例的方法, 使得子类具有父类相同的行为. 2.继承的特性: a.子类拥有父类非priavte的属性.方法: b. ...
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常
Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常 参考文章: (1)Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并 ...
- JAVA 继承基本类、抽象类、接口
Java是一个面向对象的语言,java面向对象一般有三大特征:封装.继承.多态. 封装:就是把一些属性和方法封装到一个类里. 继承:就如子类继承父类的一些属性和方法. 多态:就如一个父类有多个不同特色 ...
最新文章
- 图灵LAMP类图书精彩荟萃
- 《黑客秘笈——渗透测试实用指南(第2版)》目录—导读
- Android init.rc文件解析过程详解(二)
- php 更新页面代码,php – 自动更新页面的代码大纲
- android硬编码封装mp4,【Android 音视频开发打怪升级:音视频硬解码篇】四、音视频解封和封装:生成一个MP4...
- python django部署docker_centos利用docker部署django项目
- php命令行(cli)下相对路径的问题
- 下拉框根据输入文字自动选择和输入提示
- tplink软件升级有用吗_TP-LINK路由器升级方法 | 吴文辉博客
- c#退出窗口跳转_详解C#切换窗口
- python安装包国内地址
- eclipse字体大小调整
- 区块链入门系列之P2P
- 基、维数和坐标 过渡矩阵与坐标变换
- 2159: H.ly的小迷弟
- 如何更新R以及RStudio
- 三人同行七十稀 - 中国剩余定理浅析
- 图形工作站计算机大全,总结:高品质专业图形工作站_戴尔 Precision T7500(Xeon E5606/2GB/500GB)_台式电脑评测-中关村在线...
- 解决:springmvc中接收date数据问题
- Vue+Openlayer实现点击地图添加图标要素信息,编辑点位信息