栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Springboot】@Configuration 注解的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Springboot】@Configuration 注解的使用

作用

@Configuration注解在类上,将该类设置为springboot的配置类,相当于springmvc中的xml文件。

配置类本身也是一个组件和容器。

被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被扫描,并用于构建bean定义,初始化Spring容器。

proxyBeanMethods :
存在组件依赖时,属性值应该为true,不存在组件依赖时,可以用false。

编码实现

pom.xml



    4.0.0

    org.example
    springboot-learning
    1.0-SNAPSHOT

    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.7.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.session
            spring-session-core
        

























    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

将MyConfig.java设置为Springboot的配置类:

MyConfig.java

package com.zwy.boot.config;

import ch.qos.logback.core.db.DBHelper;
import com.zwy.boot.bean.Pet;
import com.zwy.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;


@Configuration(proxyBeanMethods = true)
public class MyConfig {

    
    @Bean
    public User user01() {
        User zhangsan = new User("zhangsan", 18);
        // User组件依赖了Pet组件
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean
    public Pet tomcatPet() {
        return new Pet("tomcat");
    }
}


其中启动类有:
MainApplication.java

package com.zwy.boot;

import ch.qos.logback.core.db.DBHelper;
import com.zwy.boot.bean.Pet;
import com.zwy.boot.bean.User;
import com.zwy.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;


@SpringBootApplication
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);
        }

        System.out.println("======================");

        // 3.从容器中获取组件,注册
        Pet pet1 = run.getBean("tom", Pet.class);
        Pet pet2 = run.getBean("tom", Pet.class);
        System.out.println("组件:" + (pet1 == pet2));

        MyConfig bean = run.getBean(MyConfig.class);
        System.out.println(bean);

        User user1 = bean.user01();
        User user2 = bean.user01();
        System.out.println(user1 == user2);

        // 4.验证proxyBeanMethods=false时,用户的宠物是不是容器中的宠物?
        User user01 = run.getBean("user01", User.class);
        Pet tom = run.getBean("tom", Pet.class);

        System.out.println("用户的宠物:" + (user01.getPet() == tom));
    }
}


另外有:

User.java

package com.zwy.boot.bean;


public class User {

    private String name;

    private Integer age;

    private 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;
    }

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", pet=" + pet +
                '}';
    }
}

Pet.java

package com.zwy.boot.bean;


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 + ''' +
                '}';
    }
}

文件结构

有文件结构如下:

运行

如果proxyBeanMethods = false,每次调用这些方法,都会产生一个新的对象,此时用户的宠物就不是宠物了,会显示用户的宠物:false

参考

https://blog.csdn.net/gaochenglong1/article/details/107387284

https://www.cnblogs.com/Infinity-Finish/articles/15759136.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号