1.导入约束
两个约束需要导入beans.xml中
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
2.配置注解的支持
<!-- 开启注解的支持 -->
<context:annotation-config/>
3.@Autowired注解
可以直接在属性上使用,也可以在set方法上面使用
import org.springframework.beans.factory.annotation.Autowired;
@Autowired
private Dog dog;
@Autowired
private Cat cat;
<bean id="cat" class="com.ybw.pojo.Cat"/>
<bean id="dog" class="com.ybw.pojo.Dog"/>
<bean id="people3" class="com.ybw.pojo.People"/>
@Autowired中有一个属性required,如果等于false,说明这个对象可以为null。
@Autowired符合byType,先查询类型,有多个相同类型的话再根据id来查询,如果id和字段名也不同则需要搭配@Qualifier
4.@Qualifier
如果有多个id,并且有多个相同类型的话可以使用@Qualifier区分
@Autowired
@Qualifier(value = "cat11")
private Cat cat;
<bean id="cat11" class="com.ybw.pojo.Cat"/>
<bean id="cat111" class="com.ybw.pojo.Cat"/>
这样就会匹配到第一个的id
5.@Resource(第二种注解,用的比较多)
先通过名字来寻找,如果寻找不到会通过类型就行寻找
import javax.annotation.Resource;
@Resource(name = "dog22")
private Dog dog;
如果相同类型还有多个的话,可以使用name属性赋值进行查询。
<bean id="dog22" class="com.ybw.pojo.Dog"/>
<bean id="dog222" class="com.ybw.pojo.Dog"/>
例子中这样查询出来的话就是第一个bean
区别
相同点:都是用来自动装配的,都可以放在属性字段上
不同点:
@Autowired默认先通过的是byType方式实现,如有多个相同类型的话再根据id来查询,如果id和属性字段名也不同则需要搭配@Qualifier。
@Resource默认通过byName的方式实现,如果找不名字,会通过byType实现,如果还有多个相同类型的话,就会报错,这时候就需要就需要name属性进行赋值。
一个是基于spring框架的。
一个是基于java环境下的。