Spring依赖注入

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


一、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;  //声明要注入的对象
		
		@Autowired
		Public TestUtil(User user){  //构造方法
			this.user = user;
		}
	}

(2)@Autowired注解标注于属性,实现Bean的注入。在标注属性时,这个属性需要提供gettersetter方法,如:
Public class TestUtil {
		@Autowired
		private 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;
			}  
			
			@Autowired
			Public void setUser(User user) {
				this.user =user;
			}

}

(4)@Autowired注解标注于任意方法之上(只要改方法定义了需要被注入的参数即可实现Bean的注入)
Public class TestUtil {
		private User user;
		
		@Autowired
		Public 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的id
		Private 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相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值