ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

@Configuration和@Bean注解

2021-11-09 17:06:19  阅读:145  来源: 互联网

标签:bean Bean User import 组件 注解 Configuration


@Configuration和@Bean 给容器中添加bean组件

@Configuration属于 SpringBoot的 组件添加功能的注解

1、基本使用

Full模式与Lite模式

  • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
  • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

2、思考:SpringBoot怎么给容器中添加Bean组件?

在之前Spring的时候,我们都是用 xxx.xml 给bean注入
在这里插入图片描述
那么现在是
(1)@Configuration 告诉SpringBoot 这是一个配置类 == 配置 文件beans.xml
(2)@Bean 给容器中添加组件 == …

3、示例:

package com.spring.boot01helloworld2.config;

import ch.qos.logback.core.db.DBHelper;
import com.spring.boot01helloworld2.bean.Pet;
import com.spring.boot01helloworld2.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 *  1、之前实在配置类中用 标签 添加,那么现在 我们可以用 方法 添加        bean
 *  2、@Configuration 告诉SpringBoot这是一个配置类  == 配置         文件beans.xml
 *  3、proxyBeanMethods:代理 bean的 方法
 *     全模式:Full(proxyBeanMethods = true)
 *     轻量级模式:Lite(proxyBeanMethods = false) 在外不会在调用代理对象,每一次调用都会产生新的代理对象
 *     场景:解决组件依赖场景
 *  4、注意这个在不同版本的SpringBoot下 设置成false可能会报错,但是不影响运行
 *  5、@Import({User.class, DBHelper.class})
 *     给容器中自动创建出这两个类型的组件
 */
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = true)
public class Myconfig {

    /**
     * 1、注解@Bean 给容器中添加组件。
     * 以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
     * 2、外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     * 
     * @return
     */
    @Bean
    public User user01(){
        User zhangsan = new User("zhangsan",19);
        //user组件依赖了Pet组件,true是成立的
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }


    /**
     *  这里也可以 给自定义组件的名字  tom
     * @return
     */
    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }


}

总结:

  • @Configuration 代替了 之前Spring中 文件beans.xml
  • @Bean 代替了 在 beans.xml 中注册的 …

标签:bean,Bean,User,import,组件,注解,Configuration
来源: https://blog.csdn.net/weixin_48321825/article/details/121231742

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有