茂名一站式网站建设报价seo免费优化工具
目录
三种配置机制
测试搭建
byName
byType
使用注解
@Autowire
@Qualifer
@Resource
@Autowire和@Resource的不同
自动装配是使用spring满足bean依赖的一种条件
三种配置机制
- 在xml中显式配置;
- 在java中显式配置;
- 隐式的bean发现机制和自动装配。
这里主要介绍第三种自动装配的方式
Spring的自动装配需要从两个角度来实现,或者说是两个操作:
- 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
- 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;
组件扫描和自动装配组合发挥巨大威力,使的显示的配置降低到最少。
测试搭建
public class Cat {public void shout() {System.out.println("miao~");}
}
public class Dog {public void shout() {System.out.println("wang~");}
}
public class User {private Cat cat;private Dog dog;private String str;
}
public class User {private Cat cat;private Dog dog;private String str;
}
byName
由于在手动配置xml过程中,常常发生字母缺漏和大小写等错误,而无法对其进行检查,使得开发效率降低。
spring的配置文件
<bean id="user" class="com.spring.pojo.User" autowire="byName"><property name="str" value="张三"/>
</bean>
此时我们看到bean中的一个autowire属性,他会去寻找类中的set名,获得将set去掉并且首字母小写的字符串,去spring容器中寻找是否有此字符串名称id的对象。如果有,就取出注入;如果没有,就报空指针异常(例如将cat改为catXXX)。
byType
确保:同一类型的对象,在spring容器中唯一。
将bean中的autowire改为byType,假如出现两个bean的class类相同就会出现异常,因为type是按照类型进行配置
使用注解
准备工作,在spring.xml配置文件注入属性
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
@Autowire
按照类型进行配置,不支持id匹配
public class User {@Autowiredprivate Cat cat;@Autowiredprivate Dog dog;private String str;public Cat getCat() {return cat;}public Dog getDog() {return dog;}public String getStr() {return str;}
}
补充@Autowired(required=false) 说明: false,对象可以为null;true,对象必须存对象,不能为null。
@Qualifer
-
@Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配
-
@Qualifier不能单独使用。
还可以在后面假如value属性
@Autowired
@Qualifier(value = "cat2")
private Cat cat;
@Autowired
@Qualifier(value = "dog2")
private Dog dog;
@Resource
Resource如果有name属性,则按先name匹配,否则再按byname匹配,如果都不成功再按bytype
@Resource
private Cat cat;
@Resource
private Dog dog;
@Autowire和@Resource的不同
1. @Autowired注解是spring的注解,此注解只根据type进行注入,不会去匹配name.但是如果只根据type无法辨别注入对象时,就需要配合使用@Qualifier注解
2. 它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired先byType,@Resource先byName。