Bean的自动装配

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

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

 

在spring中有三种装配的方式

  1,在xml中显示的配置

  2,在Java中显示配置

  3,隐式的自动装配bean【重要】

 

byName自动装配

<!--
byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid!
-->
<bean id="people" class="com.tan.pojo.People" autowire="byName">
<property name="name" value="枫叶"/>
</bean>

 

byType自动装配

<!--
byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid!
byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!
-->
<bean id="people" class="com.tan.pojo.People" autowire="byType">
<property name="name" value="枫叶"/>
</bean>

 

 

小结:

  byNmame的时候,需要保证所有bean的id唯一,并且这个需要和自动注入的属性的set方法的值一致

  byType的时候,需要保证所有bean的class唯一,并且这个需要和自动注入的属性的类型一致

 

 

使用注解实现自动装配

   基于注释的配置的引入提出了一个问题,即这种方法是否比 XML“更好”。简短的回答是“视情况而定”。长答案是,每种方法都有其优缺点,通常,由开发人员决定哪种策略更适合它们。

 

要使用注解须知:

  1,导入context约束

  2,配置注解的支持<context:annotation-config/>

 

<?xml version="1.0" encoding="UTF-8"?>

<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"

  xsi:schemaLocation="http://www.springframework.org/schema/beans

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

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

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

 

  <context:annotation-config/>

 

 

</beans>

 

 

  @Autowired

  直接在属性上使用即可!也可以在set方式上使用!

  使用Autowired我们可以不用编写set方法了,前提是你这个自动装配的属性IOC(Spring)容器中存在,且符合名字byName

  科普:

  @Nullable 字段标记了这个注解,说明这个字段可为Null

  

public @interface Autowired {

/**
* Declares whether the annotated dependency is required.
* <p>Defaults to {@code true}.
*/
boolean required() default true;

}

  

测试代码:

public class People {
//如果显示的定义了Autowired的required属性为false,说明这个对象可以为null,否则不能为空
@Autowired(required = false)
private Cat cat;
@Autowired
private Dog dog;
private String name;

 

小结:

@Resource和@Autowired的区别:

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

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

  @Resource默认通过byName方式实现,如果找不到名字,则通过byType实现!都找不到就报错【常用】

  执行顺序不同:

    @Autowired通过byType的方式实现,@Resource默认通过byName方式实现

 

posted @   枫叶红时  阅读(192)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示