依赖注入方式

spring框架

**

依赖注入方式

**

开门见山,这篇博客详细讲一讲这个依赖注入的方式,Let 's go

      依赖注入嘛,前面博客已经介绍了,这里就不多说了,嘿喂够

说依赖注入前,我们先想一想不用容器前,我们是如何对一个对象赋值的???

      set方法    有参构造    接口…

那么,我们的spring容器依赖注入也将采用set方法和有参构造这两种方式进行。

还有一点,DI依赖注入的方式:1、配置    2、注解

以下所做皆在控制反转步骤的基础之上。没有看控制反转步骤的戳这里<—

配置:

    1、有参构造


	<bean id="boss3" class="Boss">
		<constructor-arg name="name" value="zs"/>
	</bean>

	//在bean标签内使用constructor-arg对有参构造参数赋值
	//name为参数名 	value为你给定的参数值
	//引用类型的参数后面介绍

    2、set方法


	<bean id="boss4" class="Boss">
		<property name="name" value="ls"/>
	</bean>

	//在bean标签内使用property对set方法传参赋值
	//同理name为参数名 	value为你给定的参数值

    3、引用类型注入

既然我们能给当前对象赋值,那么引用类型我们就先给赋值一次,赋值之后,我们将bean标签下的id拿过来给我们的引用类型作为值传进去。


	//Car为一个类,Boss类里有这么Car的对象
	<bean id="car" class="Car">
		<property name="color" value="red"/>
		<property name="type" value="BMW"/>
	</bean>
	<bean id="boss5" class="Boss">
		<property name="name" value="ls"/>
		<property name="car" ref="car"/>
	</bean>

	//我们使用ref对引用数据类型传参,参数为bean标签的id

那么,需要注意的是:

使用有参构造,那么实体类里就要有有参构造方法;set方法同理。要不然,spring找不到则会抛出异常!!!

同样应对数组类型和List类型,我们的property标签内有array、list、map…标签

注解:

    注解首先需要导个包:
commons-logging

    接下来的事情是重新建一个xml文件(我叫它spring-config-Annotation.xml),把之前创建的文件的头部beans复制过来


//加上这两行<beans   xsi:schemaLocation="...这里"></beans>
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd

    然后在beans标签内打开扫描


//base-package表示扫描的位置(相对于Sources Root的路径)

//我的是扫描com下的全部注解

<context:component-scan base-package="com"/>

    接下来该写注解了…

1.@Component注解写到实体类前

@Component(value = “boss”)
public class Boss{}

使用getBean(“boss”)
得到Boss类对象

 

2.@Value(参数)进行普通类型赋值

@Value(“zs”)
public String name;

 

3.@Autowired 或 @Resource进行(引用类型)赋值

@Autowired是自动装配,自动找到对应的对象类进行赋值,但遇到多个对象时,便无法进行区分

@Resource(name=“参数”)是根据name的参数寻找对象进行赋值

    来看一看具体用法:


//这个老板开了一辆黄色的兰博基尼(A Rich man)

@Component(value = "car")

public class Car{

	@Value("Lamborghini")
	private String model;

	@Value("yellow")
	private String color;

}

这车真帅

接下来分别是两种注解的使用



@Component(value = "boss")

public class Boss {

	@Value("zs")
    public String name;

	@Autowired
    public Car car;

}



@Component(value = "boss")

public class Boss {

	@Value("zs")
    public String name;

	@Resource(name="car")
    public Car car;

}

既然说@Autowired不能识别同类型的对象

那么怎么才能和@Resource一样可以识别呢???


	@Autowired
    @Qualifier("car")
	public Car car;


	@Resource(name="car")
    public Car car;

加一个@Qualifier便可以做到和@Resource相同了。

注意:

    使用注解这种方式,我们便不再需要那些乱七八糟的构造方法和get/set方法。删掉它们即可(不删也无所谓)

 

 

那么,依赖注入的两种方式也就到此结束

返回 》
控制反转步骤

回到 》
控制反转与依赖注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值