### 组件添加
1、@Configuration
● 基本使用
● Full模式与Lite模式
○ 示例
○ 最佳实战
■ 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
■ 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
### 新建一个bean:
```bash
package com.maxiaoke.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 + '\'' +
", age=" + age +
'}';
}
}
```
### 添加配置类
```bash
package com.maxiaoke.boot.config;
import com.maxiaoke.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false) // 告诉SpringBoot,这是一个配置类
public class MyConfig {
@Bean("tom") //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01() {
User zhangsan = new User("zhangsan", 18);
return zhangsan;
}
}
```
### 测试
修改MainApplication启动类:
```bash
package com.maxiaoke.boot;
import com.maxiaoke.boot.bean.User;
import com.maxiaoke.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.maxiaoke.boot")
public class MainApplication {
//主方法
public static void main(String[] args) {
//1、返回我们IOC容器
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
//2、查看容器里面的组件
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
//3、从容器中获取组件
User tom01 = run.getBean("tom", User.class);
User tom02 = run.getBean("tom", User.class);
System.out.println("组件:"+(tom01 == tom02));
//4、com.maxiaoke.boot.config.MyConfig$$EnhancerBySpringCGLIB$$51f1e1ca@1654a892
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
//如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。
//保持组件单实例
User user = bean.user01();
User user1 = bean.user01();
System.out.println(user == user1);
}
}
```
查看控制台输出:
![](https://img.kancloud.cn/5d/94/5d945f893f1d3bbad0643e11319e7028_1076x559.png =1000x)
### 配置类说明
1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
2、配置类本身也是组件
3、proxyBeanMethods:代理bean的方法
* Full(proxyBeanMethods=true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
* Lite(proxyBeanMethods=false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
* 组件依赖必须使用Full模式默认。其他默认是否Lite模式
- SpringBoot的生态
- 为什么使用SpringBoot ?
- SpringBoot所处的时代背景
- SpringBoot入门
- SpringBoot配置文件
- SpringBoot简化部署-打jar包
- SpringBoot依赖管理
- SpringBoot自动配置
- SpringBoot容器功能
- SpringBoot应用应该如何编写
- SpringBoot插件-Lombok
- SpringBoot-dev-tools
- SpringBoot-Spring Initializr
- SpringBoot配置文件-yml
- SpringMVC配置概览
- SpringBoot静态资源访问
- SpringBoot欢迎页与Favicon
- SpringBoot静态资源配置原理
- SpringBoot请求参数处理
- SpringBoot普通参数与基本注解
- 模板引擎-Thymeleaf用法介绍
- SpringBoot使用Thymeleaf
- 后台管理系统-登录页面整合
- 后台登录逻辑处理
- 抽取公共页面-leftbar、header
- 公共页面完善
- 动态表格遍历
- 拦截器-登录验证
- 文件上传功能
- 自定义错误处理
- 数据访问-JDBC
- 使用Druid数据源
- 整合Mybatis
- 整合Mybatis-Plus
- 使用MybatisPlus完成CRUD功能
- 数据列表分页功能
- 用户删除功能
- SpringBoot整合Redis
- Redis统计url访问功能
- SpringBoot单元测试
- 单元测试-常用注解
- 单元测试-断言
- SpringBoot指标监控
- 监控可视化整合
- SpringBoot-Profile功能
- SpringBoot原理解析
- 项目代码仓库地址