扩展:Spring系列学习汇总
使用注解实现自动装配
- 上一篇文章我们讲解了Spring自动装配的几种方式,其实在实际开发中,我们用的最多的是使用注解来实现装配。
一、@Autowired
①这里首先说明一个点,尽量不要使用idea自动创建的beans头文件引入,需要补全,不然会报错:
②补充引入文件头:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
③xml:开启属性注解支持
<!--开启属性注解支持-->
<context:annotation-config/>
<bean id="car" class="entity.Car"/>
<bean id="house" class="entity.House"/>
<bean id="person" class="entity.Person"/>
④实体类:
public class Person {
@Autowired
private Car car;
@Autowired
private House house;
private String name;
private int age;
private String like;
public Car getCar() {
return car;
}
public House getHouse() {
return house;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getLike() {
return like;
}
}
public class Car {
public void getName(){
System.out.println("我是一辆车!");
}
}
public class House {
public void getName(){
System.out.println("我是一栋房子!");
}
}
⑤测试类:
public class TestAnonatation {
public static void main(String[] args) {
ApplicationContext Context = new ClassPathXmlApplicationContext("ContextAplication.xml");
Person person = Context.getBean("person",Person.class);
person.getCar().getName();
person.getHouse().getName();
}
}
⑥执行结果:
⑦总结:
- 使用了@Autowired之后,可以省略Person类中的set方法,简化了代码量
- @Autowired(required = false) 默认是true,对象不允许为null,false表示对象可以为null
- @Autowired 其实就相当于byType自动装配,是根据类型来自动装配的
二、@Qualifier
- @Qualifier是组合注解,不可以单独使用
- 配合@Autowired来指定byName()装配
@Autowired
@Qualifier(value = "car")
private Car car;
@Autowired
@Qualifier(value = "house")
private House house;
- 注意这个,可以直接点到xml的指定位置上去!
- 执行结果:
三、@Resource
①xml:
@Resource(name = "car")
private Car car;
@Resource
private House house;
②执行结果:
③总结:
- 指定name时,以byName为准,同时,xml中id不能为空!
- 不指定时,默认以byName为准,不成功以byType为准!
- 都失败报错!
四、@Autowired与@Resource异同
@Autowired与@Resource异同:
-
@Autowired与@Resource都可以用来装配bean。都可以写在字段上,或写在setter方法上。
-
@Autowired默认按类型装配(属于spring规范),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
-
@Resource(属于J2EE复返),默认按照名称进行装配,名称可以通过name属性进行指定。如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
-
它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired先byType,@Resource先byName
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/17095.html