Spring Boot 2從入門到入墳 | 底層注解篇:@Configuration詳解
點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時間送達(dá)
package com.meimeixia.boot.bean;
/**
* @author liayun
* @create 2021-04-23 19:14
*
* 用戶
*/
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 +
'}';
}
}
package com.meimeixia.boot.bean;
/**
* @author liayun
* @create 2021-04-23 19:16
*
* 寵物
*/
public class Pet {
private String name;
public Pet() {
}
public Pet(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pet{" +
"name='" + name + '\'' +
'}';
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user01" class="com.meimeixia.boot.bean.User">
<property name="name" value="zhangsan"></property>
<property name="age" value="18"></property>
</bean>
<bean id="cat" class="com.meimeixia.boot.bean.Pet">
<property name="name" value="tomcat"></property>
</bean>
</beans>
package com.meimeixia.boot.config;
import org.springframework.context.annotation.Configuration;
/**
* @author liayun
* @create 2021-04-23 19:42
*
*/
@Configuration // 告訴Spring Boot這是一個配置類 == 配置文件
public class MyConfig {
}
package com.meimeixia.boot.config;
import com.meimeixia.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author liayun
* @create 2021-04-23 19:42
*
*/
@Configuration // 告訴Spring Boot這是一個配置類 == 配置文件
public class MyConfig {
@Bean // @Bean注解是給容器中添加組件的。添加什么組件呢?以方法名作為組件的id,返回類型就是組件類型,返回的值就是組件在容器中的實例
public User user01() {
User zhangsan = new User("zhangsan", 18);
return zhangsan;
}
}
package com.meimeixia.boot.config;
import com.meimeixia.boot.bean.Pet;
import com.meimeixia.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author liayun
* @create 2021-04-23 19:42
*。
*/
@Configuration // 告訴Spring Boot這是一個配置類 == 配置文件
public class MyConfig {
@Bean // @Bean注解是給容器中添加組件的。添加什么組件呢?以方法名作為組件的id,返回類型就是組件類型,返回的值就是組件在容器中的實例
public User user01() {
User zhangsan = new User("zhangsan", 18);
return zhangsan;
}
@Bean
public Pet tomcatPet() {
return new Pet("tomcat");
}
}
package com.meimeixia.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
/**
* 主程序類,也叫主配置類
* @author liayun
* @create 2021-04-19 4:02
*/
//@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.meimeixia.boot")
public class MainApplication {
public static void main(String[] args) {
// 1. 返回IoC容器,IoC容器里面就包含了當(dāng)前應(yīng)用的所有組件
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 這是固定寫法喲
// 2. 我們可以來查看下IoC容器里面所有的組件,只要能查找到某一個組件,就說明這個組件是能工作的,至于怎么工作,這就是我們后來要闡述的原理了
String[] names = run.getBeanDefinitionNames(); // 獲取所有組件定義的名字
for (String name : names) {
System.out.println(name);
}
// 3. 從容器中獲取組件
}
}
package com.meimeixia.boot.config;
import com.meimeixia.boot.bean.Pet;
import com.meimeixia.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author liayun
* @create 2021-04-23 19:42
*。
*/
@Configuration // 告訴Spring Boot這是一個配置類 == 配置文件
public class MyConfig {
@Bean // @Bean注解是給容器中添加組件的。添加什么組件呢?以方法名作為組件的id,返回類型就是組件類型,返回的值就是組件在容器中的實例
public User user01() {
User zhangsan = new User("zhangsan", 18);
return zhangsan;
}
@Bean("tom")
public Pet tomcatPet() {
return new Pet("tomcat");
}
}
package com.meimeixia.boot;
import com.meimeixia.boot.bean.Pet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
/**
* 主程序類,也叫主配置類
* @author liayun
* @create 2021-04-19 4:02
*/
//@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.meimeixia.boot")
public class MainApplication {
public static void main(String[] args) {
// 1. 返回IoC容器,IoC容器里面就包含了當(dāng)前應(yīng)用的所有組件
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 這是固定寫法喲
// 2. 我們可以來查看下IoC容器里面所有的組件,只要能查找到某一個組件,就說明這個組件是能工作的,至于怎么工作,這就是我們后來要闡述的原理了
String[] names = run.getBeanDefinitionNames(); // 獲取所有組件定義的名字
for (String name : names) {
System.out.println(name);
}
// 3. 從容器中獲取組件
Pet tom01 = run.getBean("tom", Pet.class);
Pet tom02 = run.getBean("tom", Pet.class);
System.out.println("組件是否為單實例:" + (tom01 == tom02));
}
}
package com.meimeixia.boot;
import com.meimeixia.boot.bean.Pet;
import com.meimeixia.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
/**
* 主程序類,也叫主配置類
* @author liayun
* @create 2021-04-19 4:02
*/
//@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.meimeixia.boot")
public class MainApplication {
public static void main(String[] args) {
// 1. 返回IoC容器,IoC容器里面就包含了當(dāng)前應(yīng)用的所有組件
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 這是固定寫法喲
// 2. 我們可以來查看下IoC容器里面所有的組件,只要能查找到某一個組件,就說明這個組件是能工作的,至于怎么工作,這就是我們后來要闡述的原理了
String[] names = run.getBeanDefinitionNames(); // 獲取所有組件定義的名字
for (String name : names) {
System.out.println(name);
}
// 3. 從容器中獲取組件
Pet tom01 = run.getBean("tom", Pet.class);
Pet tom02 = run.getBean("tom", Pet.class);
System.out.println("組件是否為單實例:" + (tom01 == tom02));
// 配置類打印:com.meimeixia.boot.config.MyConfig$$EnhancerBySpringCGLIB$$4559f04d@49096b06
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
}
}
package com.meimeixia.boot;
import com.meimeixia.boot.bean.Pet;
import com.meimeixia.boot.bean.User;
import com.meimeixia.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
/**
* 主程序類,也叫主配置類
* @author liayun
* @create 2021-04-19 4:02
*/
//@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.meimeixia.boot")
public class MainApplication {
public static void main(String[] args) {
// 1. 返回IoC容器,IoC容器里面就包含了當(dāng)前應(yīng)用的所有組件
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 這是固定寫法喲
// 2. 我們可以來查看下IoC容器里面所有的組件,只要能查找到某一個組件,就說明這個組件是能工作的,至于怎么工作,這就是我們后來要闡述的原理了
String[] names = run.getBeanDefinitionNames(); // 獲取所有組件定義的名字
for (String name : names) {
System.out.println(name);
}
// 3. 從容器中獲取組件
Pet tom01 = run.getBean("tom", Pet.class);
Pet tom02 = run.getBean("tom", Pet.class);
System.out.println("組件是否為單實例:" + (tom01 == tom02));
// 配置類打印:com.meimeixia.boot.config.MyConfig$$EnhancerBySpringCGLIB$$4559f04d@49096b06
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
User user = bean.user01();
User user1 = bean.user01();
System.out.println("(user == user1) = " + (user == user1));
}
}
package com.meimeixia.boot.bean;
/**
* @author liayun
* @create 2021-04-23 19:14
*
* 用戶
*/
public class User {
private String name;
private Integer age;
private Pet pet;
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
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 +
", pet=" + pet +
'}';
}
}
package com.meimeixia.boot.config;
import com.meimeixia.boot.bean.Pet;
import com.meimeixia.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author liayun
* @create 2021-04-23 19:42
*
*/
@Configuration(proxyBeanMethods = true) // 告訴Spring Boot這是一個配置類 == 配置文件
public class MyConfig {
@Bean // @Bean注解是給容器中添加組件的。添加什么組件呢?以方法名作為組件的id,返回類型就是組件類型,返回的值就是組件在容器中的實例
public User user01() {
User zhangsan = new User("zhangsan", 18);
// User類型的組件依賴了Pet類型的組件
zhangsan.setPet(tomcatPet());
return zhangsan;
}
@Bean("tom")
public Pet tomcatPet() {
return new Pet("tomcat");
}
}
package com.meimeixia.boot;
import com.meimeixia.boot.bean.Pet;
import com.meimeixia.boot.bean.User;
import com.meimeixia.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
/**
* 主程序類,也叫主配置類
* @author liayun
* @create 2021-04-19 4:02
*/
//@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.meimeixia.boot")
public class MainApplication {
public static void main(String[] args) {
// 1. 返回IoC容器,IoC容器里面就包含了當(dāng)前應(yīng)用的所有組件
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 這是固定寫法喲
// 2. 我們可以來查看下IoC容器里面所有的組件,只要能查找到某一個組件,就說明這個組件是能工作的,至于怎么工作,這就是我們后來要闡述的原理了
String[] names = run.getBeanDefinitionNames(); // 獲取所有組件定義的名字
for (String name : names) {
System.out.println(name);
}
// 3. 從容器中獲取組件
Pet tom01 = run.getBean("tom", Pet.class);
Pet tom02 = run.getBean("tom", Pet.class);
System.out.println("組件是否為單實例:" + (tom01 == tom02));
// 配置類打印:com.meimeixia.boot.config.MyConfig$$EnhancerBySpringCGLIB$$4559f04d@49096b06
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
User user = bean.user01();
User user1 = bean.user01();
System.out.println("(user == user1) = " + (user == user1));
User user01 = run.getBean("user01", User.class);
Pet tom = run.getBean("tom", Pet.class);
System.out.println("用戶的寵物:" + (user01.getPet() == tom));
}
}
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/yerenyuan_pku/article/details/116201120
粉絲福利:Java從入門到入土學(xué)習(xí)路線圖
??????

??長按上方微信二維碼 2 秒
感謝點贊支持下哈 
評論
圖片
表情









