【spring框架】spring的注入类型剖析

注入类型:
a)Setter(重要)
b)构造方法
c)接口注入


1.Setter注入:
例子:
package cn.edu.hpu.service;

import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.dao.Impl.UserDaoImpl;
import cn.edu.hpu.model.User;


public class UserService {
	private UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}


	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}


	public void add(User u){
		this.userDao.save(u);
	}
}


在beans.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


  <bean id="u" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
  </bean>
	
  <bean id="userService" class="cn.edu.hpu.service.UserService">
  	    <property name="userDao" ref="u" />
  </bean>
  
</beans>


测试:
@Test
public void testAdd() throws Exception{
	BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
	
	UserService userService=(UserService)ctx.getBean("userService");
	User u=new User();
	u.setUsername("u1");
	u.setPassword("p1");
	userService.add(u);
}
测试成功!


2.构造方法注入:

例子:

UserService.java:

package cn.edu.hpu.service;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.dao.Impl.UserDaoImpl;
import cn.edu.hpu.model.User;


public class UserService {
	private UserDao userDao;
	
	public UserService(){
		
	}
	
	public UserService(UserDao userDao){
		super();
		this.userDao=userDao;
	}
}

在beans.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


  <bean id="u" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
  </bean>
	
  <bean id="userService" class="cn.edu.hpu.service.UserService">
  	 <constructor-arg>
  	        <ref bean="u"/>
  	 </constructor-arg>
  </bean>
  
</beans>

 如果在<constructor-arg>中加<bean class="xy.bar">相当于重新new了一个bean。
而上面的<ref bean="u"/>是参考了另外的已经初始化的一些bean。


测试:
@Test
public void testAdd() throws Exception{
	BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
	
	UserService userService=(UserService)ctx.getBean("userService");
	User u=new User();
	u.setUsername("u1");
	u.setPassword("p1");
	userService.add(u);
}
测试成功!


注意:构造方法里如果有两个参数,这两个参数是同一个类型,那么在传值的时候,哪个传在第一个,哪个传在第二个呢?在XML如何配置?
可以定索引,也可以定类型。
这里介绍定索引:
<bean id="userService" class="cn.edu.hpu.service.UserService">
  	 <constructor-arg index="0" value="75800000"/> 
         <constructor-arg index="1" value="42"/>  
</bean>
用index来制定传值的顺序(类型不一样要指定type属性,如type="int")


构造方法的使用并不多。


3.接口注入:使用极少,用到再查


转载请注明出处:http://blog.csdn.net/acmman

你可能感兴趣的:(java,spring,setter,接口注入,构造方法注入)