Spring依赖注入

来源:互联网 发布:淘宝网机票查询 编辑:程序博客网 时间:2024/05/16 12:33

    依赖注入或者说是控制反转,说白了就是使用了配置文件,这种思想的最大的好处就是增加了模块的重用性灵活性。下面介绍几种依赖注入的方式:


一、Setter注入
     Spring提供的Setter注入是最常用的一种Bean注入法,通过Setter注入后,直接将Bean的属性值输出在页面中

1.当前Bean对象要注入到哪个对象中,就需要在哪个对象中为当前这个对象设置私有属性,并设置属性的getter返回器和setter设置器。如:User对象注入到TestUtil对象中,那么就需要在TestUtil类中设置User对象属性,并设置getter()setter()方法,TtstUtil类的代码如下:
public  class TestUtil{private User user;public User getUser(){return user;}public void setUser(User user){this.user=user;}}

2.Springxml配置文件中,通过<bean>标签对Bean进行依赖注入配置。<bean>标签的属性主要有两个,id属性用于配置Bean的唯一标识,Bean在注入的时需要根据这个标识查找Bean对象;class属性用于指定完整的Bean类。代码如下:
<!--为User对象属性赋值 - -><bean id="user"  class="com.lh.entity.User"/><!-- 配置TestUtil,注入User --><bean id="testUtil"  class="com.lh.util.TestUtil"><property  name="user" ref="user"/></bean>

二、应用构造器注入法
类在被实例化的时候,其构造方法将被调用并且只能调用一次。因此构造器常被用于类的初始化操作。
1.TestUtil类中创建一个构造方法,并传递一个User参数

public  class TestUtil{private User user;Public TestUtil(User user){ //构造方法This.user =user;}Public boolean getUserInfo(){If(user != null) {Return true;} else{Return false;}}}

      2.Spring中的<constructor-arg><bean>元素的子元素,通过该元素可以实现为当前业务对象注入其所依赖的对象。xml中的配置如下:
<!--为User对象属性赋值 - -><bean id="user"  class="com.lh.entity.User"/><!-- 配置TestUtil,注入User --><bean id="testUtil"  class="com.lh.util.TestUtil"><constructor-arg ><ref bean="user"></constructor-arg></bean>


三、应用@Autowired注解实现Bean的注入
        可以利用Spring提供的@Autowired注解实现Bean的注入。@Autowired注解实现依赖注入时,可以标注于以下4种不同的情况。
     (1)可以在类的构造方法上标注@Autowired注解,实现Bean的注入。如:
Public class TestUtil{private User user;  //声明要注入的对象@AutowiredPublic TestUtil(User user){  //构造方法this.user = user;}}

(2)@Autowired注解标注于属性,实现Bean的注入。在标注属性时,这个属性需要提供gettersetter方法,如:
Public class TestUtil {@Autowiredprivate User user;public User getUser(){Return user;}  Public void setUser(User user) {this.user =user;}}

(3)@Autowired注解标注于setter方法之上,实现Bean的注入,如:
Public class TestUtil {private User user;public User getUser(){Return user;}  @AutowiredPublic void setUser(User user) {this.user =user;}}

(4)@Autowired注解标注于任意方法之上(只要改方法定义了需要被注入的参数即可实现Bean的注入)
Public class TestUtil {private User user;@AutowiredPublic void setUser(User user) {this.user =user;}}


四、应用@Resource注解实现Bean的注入
@Resource@Autowired注解类似,除了可以直接在属性域上标注@Resource,还可以在构造方法或者普通方法定义标注@Resource
1.TestUtil类中将@Autowired注解修改为@Resource注解,如
Public class TestUtil {@Resource(name="book")  //指定要注入的对象,book为Spring配置文件中定义的Bean的idPrivate Book book ;Public Book book;Public Book getBook() {Return book;}Public void setBook(Book book) {this.book =book;}}

2.然后在Spring的配置文件中队Bean进行配置。针对@Resource注解,在配置文件中还需要配置

CommonAnnotationBeanPostProcessor,只有这样使用的@Resource注解发挥作用。如:

<beans><bean  class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/><!-- 配置User对象 --><bean id="book"  class="com.lh.util.Book"/><!-- 配置TestUtil --><bean id="testUtil"  class="com.lh.util.TestUtil"/></beans>

不管是使用@Resource@Autowired注解,都需要添加相应的BeanPostProcessor容器,但如果使用

<context:annotation-config>的话,就不必配置BeanPostProcessor了,因为<context:annotation-config>已经把

AutowiredAnnotationBeanPostProcessCommonAnnotationBeanPostProcessor注册到容器了。


小结:
    Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。我们可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

0 0
原创粉丝点击