• Spring基础:使用注解进行配置


    使用注解开发

    前面我们已经了解了IoC容器和AOP实现,但是我们发现,要使用这些功能,我们就不得不编写大量的配置,这是非常浪费时间和精力的,并且我们还只是演示了几个小的例子,如果是像之前一样去编写一个完整的Web应用程序,那么产生的配置可能会非常多。能否有一种更加高效的方法能够省去配置呢?当然还是注解了。

    所以说,第一步先把你的xml配置文件删了吧,现在我们全部使用注解进行开发(哈哈,是不是感觉XML配置白学了)

    注解实现配置文件

    那么,现在既然不使用XML文件了,那通过注解的方式就只能以实体类的形式进行配置了,我们在要作为配置的类上添加@Configuration注解,我们这里创建一个新的类MainConfiguration

    1. @Configuration
    2. public class MainConfiguration {
    3. //没有配置任何Bean
    4. }

    你可以直接把它等价于:

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans
    4. https://www.springframework.org/schema/beans/spring-beans.xsd">
    5. beans>

    那么我们来看看,如何配置Bean,之前我们是直接在配置文件中编写Bean的一些信息,现在在配置类中,我们只需要编写一个方法,并返回我们要创建的Bean的对象即可,并在其上方添加@Bean注解:

    1. @Bean
    2. public Card card(){
    3. return new Card();
    4. }

    这样,等价于:

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans
    4. https://www.springframework.org/schema/beans/spring-beans.xsd">
    5. <bean class="com.test.bean.Card">bean>
    6. beans>

    我们还可以继续添加@Scope注解来指定作用域,这里我们就用原型模式:

    1. @Bean
    2. @Scope("prototype")
    3. public Card card(){
    4. return new Card();
    5. }

    采用这种方式,我们就可以更加方便地控制一个Bean对象的创建过程,现在相当于这个对象时由我们创建好了再交给Spring进行后续处理,我们可以在对象创建时做很多额外的操作,包括一些属性值的配置等。

    既然现在我们已经创建好了配置类,接着我们就可以在主方法中加载此配置类,并创建一个基于配置类的容器:

    1. public class Main {
    2. public static void main(String[] args) {
    3. //使用AnnotationConfigApplicationContext来实现注解配置
    4. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfiguration.class); //这里需要告诉Spring哪个类作为配置类
    5. Card card = context.getBean(Card.class); //容器用法和之前一样
    6. System.out.println(card);
    7. }
    8. }

    在配置的过程中,我们可以点击IDEA底部的Spring标签,打开后可以对当前向容器中注册的Bean进行集中查看,并且会标注Bean之间的依赖关系,我们可以发现,Bean的默认名称实际上就是首字母小写的方法名称,我们也可以手动指定:

    1. @Bean("lbwnb")
    2. @Scope("prototype")
    3. public Card card(){
    4. return new Card();
    5. }

    除了像原来一样在配置文件中创建Bean以外,我们还可以直接在类上添加@Component注解来将一个类进行注册(现在最常用的方式),不过要实现这样的方式,我们需要添加一个自动扫描,来告诉Spring需要在哪些包中查找我们提供@Component声明的Bean。

    只需要在配置类上添加一个@ComponentScan注解即可,如果要添加多个包进行扫描,可以使用@ComponentScans来批量添加。这里我们演示将bean包下的所有类进行扫描:

    1. @ComponentScan("com.test.bean")
    2. @Configuration
    3. public class MainConfiguration {
    4. }

    现在删除类中的Bean定义,我们在Student类的上面添加@Component注解,来表示此类型需要作为Bean交给容器进行管理:

    1. @Component
    2. @Scope("prototype")
    3. public class Student {
    4. String name;
    5. int age;
    6. Card card;
    7. }

    同样的,在类上也可以直接添加@Scope来限定作用域。

    效果和刚刚实际上是相同的,我们可以来测试一下:

    1. public class Main {
    2. public static void main(String[] args) {
    3. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfiguration.class);
    4. System.out.println(context.getBean(Student.class));
    5. }
    6. }

  • 相关阅读:
    LeetCode220828_89、数组中的第K个最大元素
    java 三元运算符
    前沿对话:聚焦元宇宙,数字营销都能玩什么丨温州元宇宙月
    ethers-rs rust 创建钱包,签名消息,验证签名,恢复签名地址,签名RSV对象
    查看BIOS 传递过来的acpi 表
    【C++】继承 ③ ( 继承的一些重要特性 | 子类拥有父类的所有成员 | 多态性 | 子类可以拥有父类没有的成员 | 代码示例 )
    document对象概念介绍、验证用户名是否有效、正则表达式对象、两种常见的验证提示效果
    百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12
    [Android开发学iOS系列] iOS写UI的几种方式
    Springboot 程序实现加密,禁止 jadx 反编译
  • 原文地址:https://blog.csdn.net/Leon_Jinhai_Sun/article/details/126205564