什么是 注入类、宿主类(java)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是 注入类、宿主类(java)?相关的知识,希望对你有一定的参考价值。

如题

注入类是被引用的类,宿主类应该是引用注入类的类。一般用XML文件或Annotation调用,ejb3.0是使用这个比较多的框架,用这个就不用传统的jndi了,其实原理是一样的,只是现在的架构给封装好了。好像是叫IOC模式,比较好用,可以省些代码,不过引用的注入类必须是受容器管制类。 参考技术A Java视频教程 孙鑫Java无难事 (全12CD)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=154630
J2EE开发IDE Eclipse视频教程 全9CD 完整版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=158075

Java 编程初步 傻瓜书
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159167
数据结与算法 Java语言版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160250
精通JBuilder 2005 中文版 高清PDF+随书光盘
http://bbs.topsage.com/dispbbs_121_172861_1.html
JSF JavaServer Faces in Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160229
Spring in Action (第二版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146170
Manning jQuery in Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174769
Spring In Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174107
AspectJ in Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174106
Hibernate In Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174105
Struts in Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174005
Lucene in Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=173991
Wrox出版 Beginning Spring Framework 2
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=175714
Java Extreme Programming Cookbook
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174729
Java Programming Cookbook
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=173667
Beginning Java Objects
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174685
Building Java Enterprise App
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174684
Ant: The Definitive Guide
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174683
Better Faster Lighter Java
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174681
Hibernate Reference 3.1
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174674
Pragmatic Version Control using CVS
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174479
Pragmatic Project Automation
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174476
jQuery Reference Guide
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174411
Java 2 核心技术 卷1&卷2 CHM版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174123
Wrox Professional Java JDK 6 Edition
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=163451
Java 2 宝典
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159154
侯捷java编程思想 PDF中文版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=163902
Learning Java (第三版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146869
The Java Language Specification
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=176082
Beginning Java Programming for Dummies 第二版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=163923
Java 2 核心编程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146174
Java How to Program (第六版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146371
Java All-In-One案头参考傻瓜书 (第二版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=152871
21天自学 Java 6 (2007年5月更新出版) PDF
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159315
Java咖啡馆
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151447
Thinking in Java(第四版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=152053
深入学习JFC SWING - Java基础类组件集
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=152049
J2EE全实例教程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=158057
Java信息系统设计与开发实例(第二版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151993
Java优化编程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151994
Effective Java
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=175258
Java信息系统设计与开发实例(第二版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151993
Tricks of the Java Programming
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159305
Wrox Professional Java Native Interfaces with SWT JFace
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159290
Java Swing 第二版 PDF文字版 O'Relliy出版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159158
O'Reilly - Java Database Programming with JDBC
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159292
JDBC与Java数据库程序设计
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151448
Learning JQurey (2007年7月最新出版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159652
J2EE with BEA WebLogic Server
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=176088
Pragmatic Unit Testing in Java with JUnit
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=176084
Wiley出版 J2EE 1.4 Bible
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=176080
J2EE设计开发编程指南
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159288
Java Web Services简明教程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159159
O'Reilly Java and XML (第二版PDF)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146231
O'Reilly Java and XML (第三版PDF)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=167584
Java技术XML高级编程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=147800
Expert One-on-One J2EE Design and Development
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160652
Expert One-on-One J2EE Development without EJB
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160653
JBoss - A Developer's Notebook
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146179
The Java Programming Language (第四版)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=147095
Professional Java Development with the Spring Framework
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159303
Core Java Server Faces 第二版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=145549
精通Enterprise JavaBeans
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146018
Enterprise JavaBeans EJB 第四版
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159166
J2EE应用与BEA WebLogic Server (第二版PDF)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146227
O'Reilly Java Web Services
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=146377
Ant权威指南
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=148383
Ajax和Java框架高级编程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=148371
Java Web Services简明教程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159159
Cross-Platform Web Services Using C# and Java
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160472
O'Reilly Ajax on Java
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160600
O'Reilly Java and XSLT
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=149585
O'Reilly Java and XML Binding
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=149583
O'Reilly Java and SOAP
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=149581
Design Patterns Java Companion
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=163920
J2EE Java黑客大曝光 开发安全的Java应用程序
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151446
J2ME API 速查手册
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=158248
精通J2ME无线编程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=152047
J2ME开发大全
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151987
Java网页开发的艺术
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151991
Java编程高手
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151990
Java 5.0 Tiger程序高手秘笈
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151989
Java2网络协议技术内幕(附源码)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151988
Using Enterprise JavaBeans 2
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=166051
Java技术实用教程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=158244
企业级Java安全性(构建安全的J2EE应用)
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=152048
Java语言集成开发环境Eclipse中文教程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=158237
NetBeans IDE 5.5 企业版高级开发教程
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159653
Using Enterprise JavaBeans 2
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=166051
Borland JBuilder Developer's Guide
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=166294
Eclipse [O'Reilly]
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=175257
Eclipse精要与高级开发技术
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=151986
Code Generation in Action
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174722
Java 6 3D游戏开发
http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160251
参考技术B 1,通过“注入”实现功能替换。简单的“注入”,可以通过seter或者Constructor来实现。之后可以在运行期的装配阶段把各个注入类和宿主类组合起来。简单“注入”的缺点是,还是要将具体的注入类写死在装配方法中。
2,为了解决简单注入的问题,有人利用反射+配置文件实现了注入,现在只要修改配置文件就可以实现注入类的替换了。

所谓的“注入”,可以理解为这样一个过程:把宿主类中要在运行期决议/替换的功能单独作为一个类来实现,然后把这个类的抽象(抽象类或者接口)作为宿主类的一个接口(通过seter或者constructor来赋值),最后在运行期把一个实现具体功能的实例赋给宿主类。上述的实现,宿主类要显式的标明注入类的接口类型,并且在装配阶段要显式的new出注入类,然后赋给宿主类的对应接口。这种事情,好处自然是有的了,就好像AbstractFactory或者Builder模式:只公开接口,把具体的实现抽离出来,这样可以方便的实现具体实现的替换。可是仔细看一下,这样的实现,耦合度从代码中转移到了装配类中。

而配置文件的方式,把类的装配工作以配置文件的形式实现了,这样不用修改代码、编译就可以实现注入类的替换。这样做的好处更是有的,不管怎么说,能够不修改代码实现功能的替换至少在发布方面是能够带来不错的效果。至于在代码方面能够带来多大程度上的好处,我想可能还是要视环境和应用的场合来定吧。毕竟这样做的复杂程度要比简单实现高很多了。而且这样的实现,事实上是把耦合从装配方法中转移到了配置文件中。

其实在IoC实现中花了很多的力气来做类型的匹配工作……宿主类和注入类的接口对应,这个是强类型语言所不能避免的。既然如此的话,那么无类型的动态语言实现IoC应该是非常的容易并且效果应该是不错的——可是同时负面效果就是运行期才能进行类型的识别和匹配工作容易出错,但目前似乎配置文件的方式也无法避免这个问题。

进一步的,配置文件其实也是可以演变、进化的。首先就是配置文件中的内容是否可以以元数据的形式出现?又或者以一个程序集的形式出现?该程序集其实就是配置文件或者元数据功能上的替代者——虽然修改不方便了,但是同时带来了安全上的保证。可是这样一来,我们又要面对编译的问题。呵呵,两难吧。

当下形形色色的配置文件已经泛滥成灾了,怪不得RoR要火爆起来。其实就配置文件来说,本质上是为了把耦合的位置从不可修改的编译代码中转移到一个可修改的文本文件中,这样就可以在替换部分功能的时候免除掉“编译”这个环节,为的就是这个效果吧(不知道这样说是否正确)。
虽然可以不用修改代码了但还是要修改配置文件,我个人感觉这本人本质上其实还是一回事。话说回来,如果这个趋势发展到极致,我想可能大家可以只用配置文件来写程序了,宿主程序则退化为一个配置文件的解释器——事实上,这个也是可以实现的,Eclipse和SharpDevelop的宿主程序已经是这样的一种东西了。XML的配置文件加一个解释器不就是一个新的语言么?如果不用XML做配置文件,而是用类似脚本的方式来定义配置,那么这个配置文件其实就是一个解释型的语言了。然后,为了提高这种配置方式程序的效率…… 我们兜了一个很大的圈子之后又转回到编译语言上来了。从这个角度上来说,这是一个平衡度的问题。 从更高一点的角度来看,这是一个螺旋式进化、演变、上升的过程。从现实的角度来看,未来二十年应该是解释语言和动态语言的天下。

退后一步来看这一切,我们当初为什么要OO,是为了降低大型软件中面向过程的封装问题导致的复杂性。有了OO之后,发现一切并不是那么的美好,为了降低对象之间的耦合度、增加灵活性,于是有了设计模式。人们应用了设计模式,发现调试不方便了,复杂性又提高了。IoC可以理解为是模式的一种吧,但是换一个角度来看,它不就是一个回调函数的OO方式的实现吗?我们果然是又转回了起点,下一步又要转向哪里呢?

这其实,都是为了解决软件的一种复杂性而导致的另外一种复杂性,所不同的就是人们可以选择自己更能够接收哪种复杂性。

以上是关于什么是 注入类、宿主类(java)?的主要内容,如果未能解决你的问题,请参考以下文章

详解依赖注入(DI)和Ioc容器

运行java文件显示找不到或无法加载主类怎么解决?

java无法找到或加载主类

错误:找不到或无法加载主类

java无法找到或加载主类是怎么回事?

java里面可以没有主类吗?