spring boot 三:1.组件添加-底层注解@Configuration详解

spring boot 三:1.组件添加-底层注解@Configuration详解

1 @Configuration
在这里插入图片描述

package com.xiaoxu.boot.bean;

public class User {
    private String name;
    private Integer age;

    public User(){

    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

tips:
idea:getter\setter快捷键形成
进入类:
在这里插入图片描述
alt+insert
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再在bean目录下新增一个类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.xiaoxu.boot.config;

import com.xiaoxu.boot.bean.Pet;
import com.xiaoxu.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration//告诉SpirngBoot这是一个配置类 == 配置文件
public class MyConfig {

    @Bean  //给容器中添加组件
    //以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        return new User("xiaoxu",27);
    }

    @Bean
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

然后运行主程序打印组件(可以通过方法名搜索)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以对组件取别名:
在这里插入图片描述
然后重新运行,tomcatPet就被替换为xiaoxu_tomcat:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置类也是容器中的一个组件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,注解Configuration里面有proxyBeanMethods(),默认为true
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MyConfig.java:

package com.xiaoxu.boot.config;

import com.xiaoxu.boot.bean.Pet;
import com.xiaoxu.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*
* 1.配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单例的
* 2.配置类本身也是组件
* 3.proxyBeanMethods:代理bean的方法
*
* */
@Configuration(proxyBeanMethods = true)//告诉SpirngBoot这是一个配置类 == 配置文件
public class MyConfig {
    /*
    * 外部无论对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的单实例
    * */
    @Bean  //给容器中添加组件
    //以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        return new User("xiaoxu",27);
    }

    @Bean("xiaoxu_tomcat")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

在这里插入图片描述
如果把代理设置为false:
在这里插入图片描述
在这里插入图片描述
因为配置类本身也是组件,修改配置类的注解@Configuration(proxyBeanMethods = false),那么该配置类下的组件(@Bean修饰的组件方法),就不会是单例的

tips:idea修改注释的颜色
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
组件依赖,举例:
在bean下的User加上如下:
在这里插入图片描述
重写toString:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果改为false:
在这里插入图片描述
在这里插入图片描述
总结:Full模式和Lite模式
1.配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
2.配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
3.Lite模式:@Configuration(proxyBeanMethods = false),非单实例模式;Full模式:@Configuration(proxyBeanMethods = true),单实例模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值