依赖注入初探

前端之家收集整理的这篇文章主要介绍了依赖注入初探前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

所谓依赖注入是指组件间的依赖关系由容器在运行期决定。程序本身并不负责初始化要用到的组件,只有在程序真正运行时,容器才把配置中的组件注入到程序中。我认为这体显了OO思想,现在我们程序本身只要留下接口,任何实现该接口的组件都可以通过配置注入到
程序中,从而减轻了组件之间的依赖关系,很明显也提高了组件的可移植性。依赖注入的缺点是,由于是在配置文件中完了对象的初始化,
错误在编译期间是无法发现的,有时因为配置的小小疏漏,导致化大量时间来寻找错误。另外因为对象之间的依赖是在容器中设定的,当对象较多时,依赖关系不是像写在Java程序里那样显而易见和易于跟踪。

依赖注入的实现离不开java的反射机制,该机制使得我们可以通过类名来实例化类对象,并设置对象的属性,当然,该类必须符合javabean
规范。以下代码是反射机制的利用:
1. Class cls = Class.forName("com.wqh.hibernate.pojo.Personal");
2. Object obj = cls.newInstance();
3. Method mtd = cls.getMethod("setCity",new Class []{String.class});
4. mtd.invoke(o,new Object[]{"杭州"});
第一行依据类名创建一个类对象。
第二行返回一个实例,其实该实例已经是Personal的实例。
第三行取得一个方法对象,注意取得该对象时我们给了它三个参数,一个是“setCity”,是Pesonal中的方法名,一个是“new Class []{String.class}”,这个数组包含了setCity方法的参数类型,可以有多个。还是一个参数是隐性的,cls对象,它包含了Personal的类信息。

第四行利用invoke方法把“杭州”set进obj对象。

把初始化好的实例注入另一实例,有三种方式
1、接口注入
2、构造注入
3、设值注入

基于同样原理,org.springframework.context.ApplicationContext提供了一个更加完善的实现.利用ApplicationContext,我们可以在类

的实例初始化时做更多的工作,如是否为单例,初始化事件,销毁事件,以及指定属性值,指定依赖关系等等。我们不用ApplicationContext,也照样可以实现自已的依赖注入,但是Spring提供了一套成熟而全面的基础框架,故相对传统模式,节省了大量的代码

配置文件bean.xml:
<bean id="personaldao"
class="com.wqh.hibernate.daoimpl.PersonalDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

使用:
ApplicationContext ctx= new FileSystemXmlApplicationContext("bean.xml");
Personaldao persondao = (Personaldao) ctx.getBean("personaldao");

后记:写文章比应用要复杂,应用只要能用就行了,现在写文章就感觉许多地方无法深入下去,毕竟是知识太浅了。

猜你在找的设计模式相关文章