Spring Boot 2从入门到入坟 | 底层注解篇:@Configuration详解
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
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容器里面就包含了当前应用的所有组件
        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容器里面就包含了当前应用的所有组件
        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容器里面就包含了当前应用的所有组件
        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容器里面就包含了当前应用的所有组件
        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容器里面就包含了当前应用的所有组件
        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));
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/yerenyuan_pku/article/details/116201120
粉丝福利:Java从入门到入土学习路线图
👇👇👇

👆长按上方微信二维码 2 秒 
感谢点赞支持下哈 
评论









