Spring注解开发--bean作用域+条件注解@Condition

1、bean作用域

scope: singleton(单例)| prototype(原型)
  • 执行时机(bean的产生时机):
    • singleton:容器在初始化时,就会创建对象(唯一的一个);以后再getBean时,不再产生新的bean。singleton也支持延迟加载(懒加载):在第一次使用时产生。-> 添加注解 @Lazy
    • prototype:容器在初始化时,不创建对象;只是在每次使用时再创建对象; 每次getBean()都会创建一个新的对象。
@Bean
@Scope("singleton")
@Lazy//只有单例时 在第一次使用时产生对象
public Student myStudent() {
	Student ls = new Student("ls", 23);
	return ls;
}
//xml形式
<bean id="student" class="org.entity.Student" scope="singleton" lazy-init="true">

在这里插入图片描述

2、条件注解(spring boot大量使用)

可以让某一个Bean 在某些条件下 加入Ioc容器,其他情况下不加IoC容器。
  • 增加条件Bean:给每个Bean设置条件 ,必须实现Condition接口

例:
1、准备bean

//使用条件注解
public interface Car {
}
//实现类1
public class OilCar implements Car {
}
//实现类2
public class EnergyCar implements Car {
}

2、编写环境配置类 实现Condition 接口

public class OilCarConding implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//      如果当前环境是oil,则加入oilCar
        Environment environment = context.getEnvironment(); // 获取环境
        String property = environment.getProperty("car.type");
        if(property.contains("oil")){
            return true;
        }
        return false;
    }
}
public class EnergyCarConding implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//        如果当前环境是oil,则加入oilCar
        Environment environment = context.getEnvironment();
        String property = environment.getProperty("car.type");
        if(property.contains("energy")){
            return true;
        }
        return false;
    }
}

3、在配置类中进行配置

	@Bean
	@Conditional(OilCarConding.class)
	public Car oilCar(){
	   return new OilCar();
	}
	@Bean
	@Conditional(EnergyCarConding.class)
	public Car energyCar(){
	   return new EnergyCar();
	}

4、指定当前 条件

  • 通过虚拟机参数 -Dcar.type=energy
//查看IOC容器的类容
String[] beanDefinitionNames = context.getBeanDefinitionNames();//获取容器中所有的bean 的id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值