不信你学不会Spring(3)——DI注入的使用

一、DI的分类

      创建对象的同时,需要对对象的属性进行初始化,这个过程称为注入。可以使用xml也可以使用注解实现注入,根据注入的方式不同,可以分为set注入和构造注入。

二、基于xml的注入

1.set注入

set注入在xml中的语法格式:

	<bean id = "自定义名1" class = “全类名1”>
		<!--简单类型为基本数据类型和string-->
		<property name = "简单类型字段名" value = “字段值”>

		<property name = "引用类型字段名" ref = “自定义名2”>
	</bean>
	
	<bean id = "自定义名2" class = “全类名2”>	
	</bean>

注意事项:
set注入,spring会根据<property>标签中的name属性,在类中找寻“set”+name方法,然后执行此方法。只要有此方法,没有对应属性或者set方法中不赋值也可以执行成功。

2.构造注入

构造注入在xml中的语法格式:

	<bean id = "工具人" class = “全类名”>	
	</bean>	
	
	<!--构造器注入第一种方式-->
	<bean id = "自定义名1" class = “全类名1”>
		<!--简单类型为基本数据类型和string-->
		<constructor-arg name = "构造器中形参名字" value = “字段值”>
		<constructor-arg name = "构造器中形参名字" ref = “工具人”>
	</bean>
	
	<!--构造器注入第二种方式-->
	<bean id = "自定义名2" class = “全类名1”>
		<!--简单类型为基本数据类型和string-->
		<constructor-arg index = "0" value = “字段值”>
		<constructor-arg index = "1" ref = “工具人”>
	</bean>
	
	<!--构造器注入第三种方式,按形参从左到右的位置注入-->
	<bean id = "自定义名3" class = “全类名1”>
		<!--简单类型为基本数据类型和string-->
		<constructor-arg  value = “字段值”>
		<constructor-arg  ref = “工具人”>
	</bean>

3.引用类型的自动注入

在bean标签中加入autowire属性,对于引用类型属性,无需再用<property>或<constructor>注入,可以实现自动注入。

	<bean id = "自定义名1" class = “全类名1” autowire = "byName">
		<property name = "简单类型字段名" value = “字段值”>
	</bean>
	
	<bean id = "引用类型的属性名" class = “全类名2”>	
	</bean>

autowire有两种方式:
(1)byName按名称注入,若配置文件中有<bean>的id名称和所需的引用类型的属性名一致,就把该bean对应的对象赋值给该引用类型属性。

(2)byType按类型注入,java类中引用类型属性的数据类型和spring容器中某个<bean>的class是同源关系(同类,父子类,接口与实现类),就能把这个bean赋值给引用类型的属性。

4.多配置文件

通过以下标签,可以将引入其他配置文件,使用其他配置文件中的bean

<import resourcr = "classpath:从resources开始的路径/xxxx.xml">

<!--引入properties,引入后在注解中可以使用${key}来替换为properties中对应的value-->
<context:property-placeholder location="class:xxx.properties">

三、基于注解注入

1.使用步骤

(1)首先需要有spring-aop依赖,应为之前加入了spring-context依赖,该依赖下就包含了spring-aop依赖。
(2)加入注解
(3)在配置文件中加入组件扫描器标签

2.组件扫描器

组件扫描器会自动扫描指定的包和其子包中的所有注解
<context:component-scan base-package="包名">

3.常用注解

(1)@Component(value = “等于bean标签的id”),放在类的上面,可以不设置value,value默认为类的首字母小写。和@Component类型的,有:@Repository(用在持久层类上面),@Service(用在业务层类上面),@Controller(用在控制器上面)。

(2)@Value(value = “”),直接放在属性上,无需set方法可以给简单类型赋值。如果放在set方法上,则是调用set方法给属性赋值。

(3)@Autowired,spring框架提供的注解,实现引用类型赋值,默认使用的是byType自动注入。可以放在属性上,也可以放在set方法上。
@Autowired注解配置@Qualifier(value = “”)一起使用可以实现byName注入。
@Autowired(required = false),required表示当自动注入失败,程序是否抛出异常,不屑默认为true。

(4)@Resource,是jdk自带的注解。默认是按名称注入,如果按名称不能注入,则会安装类型进行匹配注入。
@Resource(name = “”),这样写只会使用byName注入。


欢迎大家交流讨论,有错误请各位大佬指正

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值