Spring之路(12)--在注解配置中装配bean

简介: 本文目录1. 背景2. 按名称自动装配2.1 定义歌手类,并通过@component注解为其生成对应bean。2.2 定义舞台类,并指定名称装配其属性2.3 配置xml文件,开启对bean的扫描2.4 测试3. 按类型自动装配3.1 定义歌手类和舞者类3.2 通过类型自动装配舞台bean3.3 测试运行4. 总结

1. 背景

上一篇讲了xml配置中如何装配bean,其实注解配置中装配bean的原理与xml一模一样,而且达到的效果也是相同的,不过是采用了不同的方式而已。


所以本篇我们也并不更换实例,还是以在舞台中注入歌手、舞者为例,进行装配。由于注解情况下,都是直接在类、属性上添加注解,没有必要显示指定bean的包路径+类名,所以都是自动装配。


2. 按名称自动装配

我们对bean进行命名,同时在装配时指定装配的bean名称。


2.1 定义歌手类,并通过@component注解为其生成对应bean。

package org.maoge.annotationassemble;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

@Component("liujia") // 通过注解指定Dancer类生成的bean名称为liujia

public class Dancer {

@Value("刘迦") // 通过注解注入姓名

private String name;

public String getName() {

 return name;

}

public void setName(String name) {

 this.name = name;

}

}


package org.maoge.annotationassemble;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

@Component("daolang") // 通过注解指定Singer类生成的bean名称为daolang

public class Singer {

@Value("刀郎") // 通过注解注入姓名

private String name;


public String getName() {

 return name;

}

public void setName(String name) {

 this.name = name;

}

}


此处再次解释下@Component("xxx")注解的作用,Spring容器在启动时,会扫描该注解标注的类,并生成一个命名为xxx的bean对象放入容器中。如果使用注解@Component标注,则生成bean的命名为类的首字母转小写。


2.2 定义舞台类,并指定名称装配其属性

可以通过@Autowired使bean通过指定规则注入进来,同时使用@Qualifier("xxx")装配命名为xxx的bean,代码如下:


package org.maoge.annotationassemble;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

//舞台类,注意舞台也要生成一个bean

@Component("stage")

public class Stage {

@Autowired//表示自动注入

@Qualifier("daolang")//指定要装配名称为daolang的bean

private Singer singer;

@Autowired

@Qualifier("liujia")//指定要装配名称为liujia的bean

private Dancer dancer;

public Singer getSinger() {

 return singer;

}

public void setSinger(Singer singer) {

 this.singer = singer;

}

public Dancer getDancer() {

 return dancer;

}

public void setDancer(Dancer dancer) {

 this.dancer = dancer;

}

}


2.3 配置xml文件,开启对bean的扫描

不要忘记使用注解配置bean时,还是需要一个xml文件,其中要开启对bean所在包的扫描,所以spring.xml文件如下:


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

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

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

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

  <context:component-scan

   base-package="org.maoge.annotaionassemble" />

</beans>


2.4 测试

启动主类,从容器中获取舞台,会发现舞台中的歌手和舞者均已装配成功。


package org.maoge.annotationassemble;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String[] args) {

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

   "/org/maoge/annotationassemble/spring.xml");

 Stage stage = (Stage) context.getBean("stage");

 System.out.println(stage.getSinger().getName());

 System.out.println(stage.getDancer().getName());

}

}


输出结果:


刀郎

刘迦


3. 按类型自动装配

这个就更加简单了啊,因为使用注解时,一般一个类就生成一个bean(一个注解加到一个类上,生成一个对应bean)。


所以按类型匹配基本上很稳啊,没啥问题,也非常流程。目前这种方式应该是非常非常流行的,不论是SSM项目还是SpringBoot项目,这种方式都使用的非常多。


看例子:


3.1 定义歌手类和舞者类

package org.maoge.annotationassemble;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

@Component // 未指定命名,所以默认命名应为singer

public class Singer {

@Value("刀郎") // 通过注解注入姓名

private String name;

public String getName() {

 return name;

}

public void setName(String name) {

 this.name = name;

}

}


package org.maoge.annotationassemble;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

@Component // 未指定命名,所以默认命名应为dancer

public class Dancer {

@Value("刘迦") // 通过注解注入姓名

private String name;

public String getName() {

 return name;

}

public void setName(String name) {

 this.name = name;

}

}


3.2 通过类型自动装配舞台bean

不用加@Qualifier,默认就是自动按类型装配,因为太常用了。


package org.maoge.annotationassemble;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

@Component

public class Stage {

@Autowired // 按类型自动装配

private Singer singer;

@Autowired // 按类型自动装配

private Dancer dancer;

public Singer getSinger() {

 return singer;

}

public void setSinger(Singer singer) {

 this.singer = singer;

}

public Dancer getDancer() {

 return dancer;

}

public void setDancer(Dancer dancer) {

 this.dancer = dancer;

}

}


3.3 测试运行

还是同样的xml和Main.java,直接运行Main进行测试,依然没问题。


4. 总结

在使用注解时,实现了装配的高度自动化,非常锋利。


装配这个事,并不复杂,就是往一个bean的属性中注入其他bean。


自动装配,就是指定要装配的bean的类型或者名称,然后指定自动装配的规则(名称/类型),然后由容器自动将相应bean注入被装配bean的属性。

相关文章
|
27天前
|
XML 安全 Java
|
4天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
114 73
|
4天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
4天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
4天前
|
Java Spring
【Spring配置相关】启动类为Current File,如何更改
问题场景:当我们切换类的界面的时候,重新启动的按钮是灰色的,不能使用,并且只有一个Current File 项目,下面介绍两种方法来解决这个问题。
|
4天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
4天前
|
Java Spring
【Spring配置】创建yml文件和properties或yml文件没有绿叶
本文主要针对,一个项目中怎么创建yml和properties两种不同文件,进行配置,和启动类没有绿叶标识进行解决。
|
12天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
57 14
|
9天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
42 6
|
11天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
62 3