弹簧装配bean的3种方式总结

  

  

这段时间在学习春天,依赖注入DI和面向切面编程AOP是春天框架最核心的部分。这次主要是总结依赖注入的bean的装配方式。

  

什么是依赖注入呢?也可以称为控制反转,简单的来说,一般完成稍微复杂的业务逻辑,可能需要多个类,会出现有些类要引用其他类的实例,也可以称为依赖其他类。传统的方法就是直接引用那个类对象作为自己的一个属性,但如果我们每次创建这个类的对象时,都会创建依赖的类的对象,还有如果那个类将来可能不用了,还需要到这个类去删除这个对象,那破坏了代码的复用性和导致高度耦合!

  

依赖注入的出现可以很好地解决这个问题,依赖注入就是由系统负责协调类的依赖对象的创建,我们无需自己去显示的创建依赖对象,而是由系统给我们注入这个对象,系统控制了这个对象的创建,也称为控制反转。

  

<强>春天给我们注入对象有三种方式:

  
      <李>隐式的bean扫描发现机制和自动装配李   <李>在java中进行显示配置李   <李>在XML中进行显示配置李   
  

  

春天从两个角度实现自动化装配:组件扫描和自动装配。

  

当对一个类标注@ component注解时,表明该类会作为组件类,春天将为这个类创建bean。当在应用文中引用这个bean,春天会自动扫描事先指定的包查找这个bean,但春天默认是不启用组件扫描的,可以在XML中配置加上<代码> & lt;上下文:component-scan基础包=皒x”/祝辞>         包bbs.dao;   @ component   公共接口Postdao {/*   *用户发的帖,帖子表添加帖子信息   */公共int addpost (@Param(“标题”)字符串标题,@Param(“内容”)的字符串内容,@Param (userid) int userid);   }      包bbs.dao;   @ component   公共接口Userdao {/*   *用户发帖后,用户表将用户发帖数加一   */公共int addpost (int userid);   }      

再在bbs.service包中创建一个postservice接口及其实现类,依赖Postdao和Userdao。

        包bbs.service;   公共接口PostService {/*   用户发帖后,先添加帖子信息再更新用户发帖数量   */公共空间addpost(字符串标题、字符串内容,int userid);   }      包bbs.service;   @ component   公共类PostserviceImpl实现PostService {      私人Postdao Postdao;   私人Userdao Userdao;//@ autowired//公共空setPostdao (Postdao Postdao)//{//this.postdao=postdao;//}////@ autowired//公共空setUserdao (Userdao Userdao)//{//this.userdao=userdao;//}      @ autowired   公共PostserviceImpl (Postdao Postdao Userdao Userdao)   {   this.userdao=userdao;   this.postdao=postdao;   }      公共空间addpost(字符串标题、字符串内容,int userid) {   int i=postdao。addpost(标题、内容、用户标识);   int j=userdao.addpost (userid);   如果(i==1, j==1)   System.out.println(“发帖成功”);   其他的   System.out.println(“发帖失败”);   }   }      

@ component在接口实现上注解就可以,但发现,在userdao postdao接口也加上了,其实可以去掉,因为我采用mybatis在xml中配置数据库的操作,动态实现刀接口。等下会提到。上面代码出现的@ autowired注解实现bean自动装配,会在春天应用上下文中的组件类寻找需求的bean。一般有两种装配方式:构造器和Setter方法(其他方法名也行,只要能够使注入的豆成为这个类的属性就行)

  

也可能出现春天没有查找到匹配的bean会抛出异常,在@ autowired加上所需<代码>=false> @ qualifier() 括号写这个bean的id,在注入时也加上<代码> @ qualifier()>         @ component   @ qualifier (“postdao”)   公共接口Postdao {   。   }      @ component   @ qualifier (“userdao”)   公共接口Userdao {   。   }      @ autowired   @ qualifier (“usedao”)   公共空间setUserdao (Userdao Userdao)   {。   }      @ autowired   @ qualifier (“postdao”)   公共空间setUserdao (Postdao Postdao)   {。   }

弹簧装配bean的3种方式总结