【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

相关文章
|
3天前
|
前端开发 Java 数据库连接
Java与Spring框架的深度融合
Java与Spring框架的深度融合
|
2天前
|
存储 缓存 Java
深入解析Spring框架中的ReflectionUtils
深入解析Spring框架中的ReflectionUtils
8 1
|
3天前
|
Java Spring 容器
spring如何进行依赖注入,通过set方法把Dao注入到serves
spring如何进行依赖注入,通过set方法把Dao注入到serves
|
2天前
|
Java Spring 容器
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
5 0
|
3天前
|
消息中间件 Java Kafka
教程:Spring Boot集成Kafka Streams流处理框架
教程:Spring Boot集成Kafka Streams流处理框架
|
3天前
|
Java Linux 程序员
技术笔记:Spring生态研习【五】:Springboot中bean的条件注入
技术笔记:Spring生态研习【五】:Springboot中bean的条件注入
|
4天前
|
缓存 Java Maven
深入解析Google Guava库与Spring Retry重试框架
深入解析Google Guava库与Spring Retry重试框架
|
4天前
|
Java 数据处理 数据库
深入解析Spring Batch:企业级批处理框架的技术之旅
深入解析Spring Batch:企业级批处理框架的技术之旅
|
2月前
|
XML Java 数据格式
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
48 0
|
XML Java 数据格式
【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入集合类型属性
【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入集合类型属性
【Spring 从0开始】IOC容器的Bean管理 - 基于XML,注入集合类型属性