java 自动装配_6、Bean的自动装配 和 使用注解实现自动装配

一、Bean的自动装配(AutoWired):

自动装配是Spring满足bean依赖一种方式!

Spring会在上下文中自动寻找,并自动给bean装配属性!

在Spring中有三种装配的方式

在xmI中显示的配置(前面的博客都是用的这种)

在java中显示配置

隐式的自动装配bean [重要 ! ]

1、配置环境

一个人有两个宠物!

pojo实体类:

public classCat {public voidcall(){

System.out.println("猫在叫~");

}

}

public classDog {public voidcall(){

System.out.println("狗在叫~");

}

}

public classPerson {privateCat cat;privateDog dog;privateString name;

@OverridepublicString toString() {return "Person{" +

"cat=" + cat +

", dog=" + dog +

", name='" + name + '\'' +

'}';

}publicCat getCat() {returncat;

}public voidsetCat(Cat cat) {this.cat =cat;

}publicDog getDog() {returndog;

}public voidsetDog(Dog dog) {this.dog =dog;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

}

beans.xml

测试文件:

@Testpublic voidtest1(){

ApplicationContext context= new ClassPathXmlApplicationContext("bens.xml");

Person person= (Person) context.getBean("person");

person.getCat().call();

person.getDog().call();

}

猫在叫~

狗在叫~

2、aotowire属性

byName:

byType:

小结:

byName:java类中的引用类型名称(Cat cat)跟bean的id是一样的 spring能够赋值给引用类型。

bytype:java类中引用类型的数据类型和spring容器中(配置文件),的class属性是同源关系的,这样的bean能够赋值给引用类型

同源:    1. java类中引用类型的数据类型和bean的class的值是一样的。

2. java类中引用类型的数据类型和bean的class的值父子类关系的。

3. java类中引用类型的数据类型和bean的class的值接口和实现类关系的

二、注解实现自动装配

使用须知:不需要再xml文件中再进行配置bea了、

1、导入约束

2、配置注解的支持:

https://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

https://www.springframework.org/schema/context/spring-context.xsd">

注解的使用:

@AutoWired

加到属性上面,也可以加到setter方法,或者直接加到属性上甚至set方法可以不要了、

public classPerson {

@AutowiredprivateCat cat;

@AutowiredprivateDog dog;privateString name;

@OverridepublicString toString() {return "Person{" +

"cat=" + cat +

", dog=" + dog +

", name='" + name + '\'' +

'}';

}

}

@Qualifier

如果@Autowired自动装配的环境比较复杂【比如多个bean对象】,自动装配无法通过一个注解[@Autowired] 完成的时候、我们可以

使用@Qualifier(value="xx")去配置@Autowired的使用,指定一个唯一 的bean对象注入!

xml文件:

pojo实体类:

@Autowired@Qualifier(value="dog2")privateDogdog;

@Resouece

@Resource(name = "dog2")

private Dog dog;

小结:

@AutoWired和@Resource 的区别:

都是用来自动装配的,都可以放在属性字段上

@ Autowired 通过byType的方式实现,而且必须要求这个对象存在! [常用]

@ Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现! 如果两个都找不到的情况下,就报错! [常用]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值