@resource与@autowired的区别

@resource与@authorwired在本质上它们的作用是一样的,都是省去为一个对象变量写get,set方法,自动为这个对象注入实例化对象即注入依赖。而它们的注入的方式还是有所区别的 

@resource是基于j2ee的注解,默认是按名字进行注解,若不指定装配bean的名字,当注解写在字段上时,默认取字段名,按照名称查找通过set方法进行装配,倘若有多个子类,则会报错。若想不报错,只需加(required=false)
例如:

package com.chexiang.common;

public class Customer 
{       @Resource
	private Person person;
	
	public Customer(Person person) {
		this.person = person;
	}
	
	public void setPerson(Person person) {
		this.person = person;
	}
	//...
}
package com.chexiang.common;
@Component
public class Person 
{
	//...
}
其对应的xml装配过程是如下,先定义customer的bean,然后申明装配方式是byname,再定义一个person类的bean。这是id名为customer的bean对象的对象属性会自动按照属性名去找寻id名与属性名一样的bean,则id为person的bean被注入到了customer的person变量里
<bean id="customer" class="com.chexiang.common.Customer" autowire="byName" />	
<bean id="person" class="com.chexiang.common.Person" />
@autowired是基于spring的注解org.springframework.beans.factory.annotation.Autowired,它默认是按类型进行的装配的,如果想要它按名字进行装配只需在@autowired下面加@qualifier("name")`注解,其对应的xml装配方式如下

两个Bean,person 和 ability.
package com.chexiang.common;
 
public class Person 
{       @autowired
	private Ability ability;
	//...
}
package com.chexiang.common;
@Component 
public class Ability 
{
	private String skill;
	//...
}
<!-- person has a property type of class "ability" -->
	<bean id="person" class="com.yiibai.common.Person" autowire="byType" />
		
	<bean id="invisible" class="com.yiibai.common.Ability" >
		<property name="skill" value="Invisible" />
	</bean>
id名为person的bean会把ability属性按照bean里定义的class的类型进行装配,因为id名为invisible的bean的class类型与id名为person的变量ability的类型相同,则进行装配。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值