依赖注入的三种方式

构造器注入

该注入方式是在spring容器在创建具体的类的对象的时候是调用的类的构造器,只需要我们创建一个带参数的构造器,然后在配置文件中将构造函数的参数传入该类,则spring在创建该类的时候就会将依赖注入。
注意:spring默认是创建无参构造器的,所以当写了有参构造器后,无参构造器就会失效,这时候我们需要将无参构造函数和有参构造函数一起写出来。

<bean id ="clientDao" class="jee.FileClientDAoImpl"></bean>
	<bean id="clientService" class="jee.ClientService">
		<!-- 构造器参数 -->
		<!-- ref是引用,引用容器中id为clienDaode 一个bean,作为clientService构造器的参数 -->
		<!-- name是参数的名字,ref指向的是参数的对象-->
		<constructor-arg name="clientDao" ref="clientDao" ></constructor-arg>
	</bean>
private ClientDao clientDao;
public ClientService(ClientDao clientDao)
	{
		System.out.println("ClientService 有参构造器");
		this.clientDao=clientDao;
	}

setter方法注入

我们需要为参数创建一个set方法。

private ProductDao productDao;
public void setProductDao(ProductDao productDao) {
		this.productDao = productDao;
	}

配置文件中的代码如下图所示

<bean id="productDao" class="jee.DBProductDaoImpl"></bean>
	
	<bean id= "productService" class="jee.ProductService">
		<!-- setter方法注入依赖,调用setProductDao方法注入依赖 -->
		<!--通过set方法将ref中对应的对象注入给productDao-->
		<property name="productDao" ref="productDao"></property> 
</bean>

还可以为一些数值型参数注入值,代码如下

private int num;
	
	private String name;
	
	private Set<String> set;
	
	private List<String> list;
	
	private Properties prop;
	
	private Map<String , String > map;
	
	public void setNum(int num) {
		this.num = num;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setSet(Set<String> set) {
		this.set = set;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public void setProp(Properties prop) {
		this.prop = prop;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

<bean id= "productService" class="jee.ProductService">
		<!--<property name="productDao" ref="productDao"></property> -->
		<!-- setter方法注入依赖 -->
		
		
		<property name="productDao">
		<!-- 创建一个匿名的bean注入到productDao属性中 -->
			<bean class="jee.DBProductDaoImpl"></bean>
		</property>
		
		<property name="num" value="10"></property>
		<property name="name" value="篮球"></property>
		<property name="set">
			<set>
				<value>setv1</value>
				<value>setv2</value>
				<value>setv3</value>
			</set>
		</property>
		<property name="list">
			<list>
				<value>listv1</value>
				<value>listv2</value>
				<value>listv3</value>
			</list>
		</property>
		
		<property name="prop">
			<props>
				<prop key="k1">v1</prop>
				<prop key="k2">v2</prop>
				<prop key="k3">v3</prop>
			</props>
		</property>
		
		<property name="map">
			<map>
				<entry key="k1" value="v1"></entry>
				<entry key="k2" value="v2"></entry>
				<entry key="k3" value="v3"></entry>
			</map>
		</property>
	</bean>

注解注入

加入context命名空间
https://docs.spring.io/spring/docs/5.1.17.BUILD-SNAPSHOT/spring-framework-reference/core.html#beans-annotation-config
上面是官网地址,可以从官方文档中找到命名空间的配置
在这里插入图片描述

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


	<!-- 可以激活@Autowired@Resource @PostConstruct@PreDestory注解-->
	<context:annotation-config></context:annotation-config>
	
		
	</bean>
</beans>

当我们需要注入的时候,只需要在需要注入的变量上面写上注解即可

//依赖注入
	//会从容器中搜索一个clienDao类型的注入
	//@Autowired会从容器中搜索一个ClientDao类型的实例,并将此实力注入给clienDao对象
	//@Autowired默认要求必须存在一个clientDao类型的bean
	//@Resource(name = "clientDao")从容器中寻找一个id名字为clientDao的实例,并将此实例注入给clienDao对象
	//@Resource默认是按名称搜索
	//@Autowired默认按照类型搜索
	@Qualifier("clientDao")//寻找一个id为clientDao的bean
	private ClientDao clientDao;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值