springboot组件添加,@Configuration,@Import,@Conditional,@ImportResource

有关组件添加的注解@Bean、@Component、@Controller、@Service、@Repository

@Configuration

  1. 之前spring创建xml的方式

在这里插入图片描述
2. 现在通过标有@Configuration的配置类

package com.ll.config;

import com.ll.domain.Pets;
import com.ll.domain.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // 告诉springboot这是配置文件,以前xml能做的,它都能做
public class MyConfig {
    //给容器中添加一个user组件(组件id:方法名;组件类型:返回类型;返回值:组件容器中的实例(单例))
    // @Bean("user01")  自定义组件id
    @Bean
    public User user01(){
        return new User(18,"zhangsan");
    }

    @Bean
    public Pets pets01(){
        return new Pets("cat");
    }
}

  1. 打印的结果
    可以看到MyConfig 本身就是组件
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);// 固定写法
        String[] beanDefinitionNames = run.getBeanDefinitionNames();
        for (String a:beanDefinitionNames) {
            System.out.println(a);
        }
    }
}

在这里插入图片描述

4.容器中创建的组件实单例的

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);// 固定写法
        String[] beanDefinitionNames = run.getBeanDefinitionNames();
        for (String a:beanDefinitionNames) {
            System.out.println(a);
        }

        User user1 = run.getBean("user01",User.class);
        User user2 = run.getBean("user01",User.class);
        System.out.println(user1==user2);// true 在容器中是单实例的
    }
  1. springboot2新增特性proxyBeanMethods
    proxyBeanMethods:代理bean的方法
    Full(proxyBeanMethods = true),速度会慢一点,默认为true
    Lite(proxyBeanMethods = false),springboot不会检查bean是否在容器中已经存在,所以速度很快,适用于没有组件依赖的情况
// @Configuration的源码,其中有proxyBeanMethods()
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";

    boolean proxyBeanMethods() default true;
}

组件依赖
Dog和Pets有组件依赖

public class Pets {
    private String name;

    public Pets(){

    }
    
    private Dog dog;

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Pets(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Pets{" +
                "name='" + name + '\'' +
                '}';
    }
}

@Import
给容器添加组件,类注解
@Import({User.class, DBHelper.class})

@Conditional
满足Conditional的条件,才进行组件注入
可以作用于类和方法
在这里插入图片描述

@ImportResource
springboot的容器中没有spring的xml中配置的bean
如果要做大量的bean迁移到springboot环境中,可以使用@ImportResource注解引入原来的xml的配置

@ImportResource("classpath:beans.xml")
public class MyConfig {
}

@ConfigurationProperties
是跟application.properties里面进行绑定的
组件需要在容器中
配置绑定
把properties配置文件配到javabean里
方式1:
@Component + @ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "zhangsan")
public class User {
// 省略bean
}

方式2:
@EnableConfigurationProperties + @ConfigurationProperties
如果要注册的类是引的第三方包里的,不能加@Component注解到包里,这时候就需要用这种方式
开启配置绑定功能并把这个组件自动注册到容器中

@Component
@ConfigurationProperties(prefix = "zhangsan")
public class User {
// 省略bean
}
@EnableConfigurationProperties(User.class)
public class MyConfig {
// 省略
}

原来写法:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值