### 組件添加
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);
}
}
```
查看控制臺輸出:

### 配置類說明
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原理解析
- 項目代碼倉庫地址