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),单实例模式
本文详细介绍了Spring Boot中@Configuration注解的使用方法及其对组件管理的影响。通过具体示例展示了如何利用@Bean注解向Spring容器注册组件,并探讨了proxyBeanMethods属性在不同设置下对组件实例化方式的影响。
1653

被折叠的 条评论
为什么被折叠?



