• 对@Bean注解的学习理解(大白话解释)


    @Bean注解用法解析

    在深入了解@Bean注解之前,发现了如下问题:
    一个UserController类:

    @Controller
    public class UserController {
        @Bean
        public void sayHi() {
            System.out.println("Hi~");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    启动类如下:

    @Controller
    public class App {
        public static void main(String[] args) {
             ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
             UserController user = applicationContext.getBean("sa",UserController.class);
         }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    可见,我启动类并没有调用user的sayHi()方法,但运行后却发现,输出了Hi~,我并没有调用啊
    在这里插入图片描述
    然后很快啊,在网上查阅了许多对@Bean注解的解释,总结成如下我自己的理解(更为通俗,大白话):

    • 用法:@Bean注解只能加载方法上
    • 执行时机:@Bean注解和你在xml里面用Bean标签存储一样,他会在你加载xml上下文时(启动类中 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");这一条代码)就自动执行,并且只会执行一次。
    • 存储为Bean的命名方式: 利用Bean注解存储对象,命名方式不同于之前的机制(参照上一篇博客),而是直接利用方法名作为对象名称,例如我这里的方法名叫 sa() ,那么这个Bean的id为sa
    • 用处: 一个例子解释
    @Controller
    public class UserController {
        @Bean
        public StudentController sa() {
            return new StudentController();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    可以看到 sa() 是return了一个StudentController类对象,return到哪里去了呢?就是return了一个对象存储到Spring里,托管给Spring,id为 sa(如利用Bean注解存储对象,对象名陈就是方法名称),所以说@Bean注解和你在xml里面用Bean标签存储一样

    @Bean注解存在的意义

    那么了解了@Bean注解的一些用法之后又有个问题
    有那么多注册Bean的注解,为啥还要来个@Bean注解?

    • 因为类似于@Controller这些注解,他只能用在类上,应用不够灵活,很呆,而@Bean注解作用于方法上,你可以搭配条件语句之类的,动态获取Bean对象,可以随环境变化而变化

    以上就是对@Bean注解的一些浅层理解学习,更深层的暂时没有研究,因为我要准时睡觉了,晚安玛卡巴卡
    在这里插入图片描述

  • 相关阅读:
    电力系统中新型预测双二元变量机组组合问题(Matlab代码实现)
    操作系统安全:Linux安全审计,Linux日志详解
    车间调度问题总结笔记二——AGV调度
    Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践
    myj的尘歌壶
    Aria2 for Mac (免HomeBrew)
    Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱
    【go-postgres】在go中,实现自动分表
    基于特征选择的二元蜻蜓算法(Matlab代码实现)
    18、JAVA入门——接口
  • 原文地址:https://blog.csdn.net/lzhNox/article/details/127780114