1. 程式人生 > >【spring框架5】spring的注入型別剖析

【spring框架5】spring的注入型別剖析

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u013517797/article/details/43701405

注入型別: 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.介面注入:使用極少,用到再查