依赖注入初探

所谓依赖注入是指组件间的依赖关系由容器在运行期决定。程序本身并不负责初始化要用到的组件,只有在程序真正运行时,容器才把配置中的组件注入到程序中。我认为这体显了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");

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值