使用注解和XML完成注册bean

本文详细介绍了在Spring框架中如何使用注解和XML进行bean的注册与装配。从组件扫描、自动装配、JavaConfig及XML配置等多个方面进行深入探讨,包括@component、@Autowired注解的使用,以及通过@Configuration和@Bean注解声明bean。同时,讨论了如何在JavaConfig中引用XML配置以及XML中引用JavaConfig,展示了不同配置方式的融合。
摘要由CSDN通过智能技术生成

1、配置可选方案

(1)在XML中进行显式配置
(2)在java中进行显式配置
(3)隐式的bean发现机制和自动装配
尽可能使用自动配置的机制,显式配置越少越好
==> 必须显式配置,使用JavaConfig
==> 最后使用有便利命名空间的XML

2、自动化装配bean

两个角度实现:

组件扫描:Spring会自动发现应用上下文所创建的bean

自动装配:Spring自动满足bean之间的依赖

2.1 创建可被发现的bean

(1)@component注解

——表明该类会作为组件类,并告知Spring要为该类创建bean。

(2)启用组件扫描

——组件扫描默认不启用,需要显式配置Spring

(i)通过java代码启用组件扫描

使用@ComponentScan注解——能够在Spring中启用组件扫描

若没有其他配置,默认扫描与配置类相同的包,查找带有@component注解的类,在Spring中自动创建一个bean

(ii)使用XML启用组件扫描

可使用Spring context命名空间的<context:component-san>元素

2.2 为组件扫描的bean命名

Spring应用上下文中所有的bean都会给定一个ID,默认根据类名指定一个ID,就是将类名的首字母变成小写。

如果想设置不同的ID,将期望的ID作为值传入@component注解——@component(“xxx”)

2.3 设置组件扫描的基础包

(1)basePackages属性

@ComponentScan(“指定的包名”)

 @ComponentScan(basePackages = {
   "xxx", "xxx"} )

——类型不安全,重构代码后,所指定的基础包可能出现错误

(2)basePackageClasses属性

——指定为包中所包含的类或接口,将这些类所在的包作为组件扫描的基础包

   @ComponentScan(basePackageClasses = {
    xxx.class, xxx.class } )

可以在要扫描的包中,创建一个用来进行扫描的空标记接口,能够保持对重构友好的接口引用,避免引用任何实际的应用程序代码。

2.4 通过为bean添加注解实现自动装配

@Autowired注解

  • 在需要装配的地方添加该注解
  • 可用在构造器、Setter方法以及任何其他的方法上

若有且只有一个bean匹配依赖需求,就会被装配起来

如果没有匹配的bean,在应用上下文创建时,Spring会抛出异常。

为了避免异常的出现,可以设置:
@Autowired(required = false)。

required=false后,如果没有匹配的bean,会让这个bean处于未装配的状态,需要进行NULL检查,可能出现NPE!

如果有多个bean能够满足依赖关系,抛出异常,表明没有明确指定要选择哪个bean进行装配。

@Autowired是Spring特有的,还可以替换为@Inject注解,其来源于java依赖注入规范,该规范还定义了@Named注解,可替换@Component注解。

在这里插入图片描述

3、通过Ja

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用`@Autowired`注解自动装配时,需要确保以下三个条件满足: 1. Spring容器必须能够扫描到该bean,即该bean必须已经被实例化并注册Spring容器。 2. 该bean必须具有默认的构造函数。 3. 该bean必须被标注为`@Component`或其它相关注解。 如果使用XML配置生成的bean,可以使用`<context:component-scan>`元素扫描包路径,将标注为`@Component`或其他相关注解的类自动纳入Spring容器,如下所示: ```xml <context:component-scan base-package="com.example"/> ``` 如果使用注解生成的bean,需要在配置类上添加`@ComponentScan`注解,指定需要扫描的包路径,如下所示: ```java @Configuration @ComponentScan(basePackages = "com.example") public class AppConfig { // ... } ``` 在使用`@Autowired`注解自动装配时,可以在成员变量、构造函数或方法参数上使用注解,如下所示: ```java @Service public class MyService { @Autowired private MyDao myDao; public MyService(MyDao myDao) { this.myDao = myDao; } @Autowired public void setMyDao(MyDao myDao) { this.myDao = myDao; } } ``` 需要注意的是,`@Autowired`注解默认情况下是按照类型进行自动装配的,如果存在多个同类型的bean,需要使用`@Qualifier`注解指定具体的bean名称,如下所示: ```java @Service public class MyService { @Autowired @Qualifier("myDaoImpl") private MyDao myDao; } ``` 以上就是使用`@Autowired`注解自动装配XML注解生成的bean的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值