2021-12-27 Spring day3(多环境切换,Aware接口)

一、多环境切换

开发中如何在 开发、生产、测试环境之间进行快速切换
spring Profile(底层是条件注解)

package org.kk2.ioc;

import org.springframework.stereotype.Service;

/**
 * @program: ioc01
 * @description:
 * @author: zjx
 * @create: 2021-12-27 20:01
 **/


public class DataSource {
    private String url;
    private String username;
    private String password;

    @Override
    public String toString() {
        return "DataSource{" +
                "url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

    //开发环境DataSource
    @Bean("ds")
    @Profile("dev")
    DataSource devDs()
    {
        DataSource ds = new DataSource();
        ds.setUrl("jdbc:mysql:///vhr");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }

    //开发环境DataSource
    @Bean("ds")
    @Profile("prod")
    DataSource prodDs()
    {
        DataSource ds=new DataSource();
        ds.setUrl("jdbc://192.168.23.56:3306/vhr");
        ds.setUsername("root");
        ds.setPassword("123");
        return ds;
    }
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext();
        //设置完环境信息再注册 .class
        context.getEnvironment().setActiveProfiles("dev");
        context.register(JavaConfig.class);
      context.refresh();
        DataSource ds=(DataSource) context.getBean("ds");
        System.out.println("ds="+ds);
        
    }

二、Bean的作用域

Spring 容器中多次获取同一个Bean,默认情况下是同一个实例。
JavaConfig中也可以配置非单例:
@Bean
@Scope(""prototype)

三、混合配置

配置类
@Configuration
@ImportResource(“classpath:applicationContext.xml”)注解 可以导入一个XML配置

四、Aware接口——获取容器的信息

如果在方法中需要获取容器的信息,打印容器信息等…可以继承Aware这个接口,然后设置个私有变量,通过继承获取这个变量,在我们的方法中使用它。

package org.kk2.ioc;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @program: ioc01
 * @description:Aware里面提供了一些与容器相关的东西,交给变量来管理
 * @author: zjx
 * @create: 2021-12-27 21:11
 **/

//实现这些接口就能获取容器信息

@Service
@PropertySource(value = "javaboy.properties")
public class AwareService implements BeanNameAware, BeanFactoryAware, ResourceLoaderAware, EnvironmentAware {
    private String beanName;
    private ResourceLoader resourceLoader;
    private Environment environment;

    /**
    * @Description: 获取bean的生成工厂
    * @Param: [beanFactory]
    * @return: void
    * @Author: zjx
    * @Date: 2021/12/27
    */
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {

    }

    /**
    * @Description: 获取Bean的名字
    * @Param: [s]
    * @return: void
    * @Author: zjx
    * @Date: 2021/12/27
    */
    @Override
    public void setBeanName(String s) {
        this.beanName=s;

    }

    /**
    * @Description: 获取环境信息
    * @Param: [environment]
    * @return: void
    * @Author: zjx
    * @Date: 2021/12/27
    */
    @Override
    public void setEnvironment(Environment environment) {
        this.environment=environment;
    }

    /**
    * @Description: 获取
    * @Param: [resourceLoader]
    * @return: void
    * @Author: zjx
    * @Date: 2021/12/27
    */
    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader=resourceLoader;

    }

    public void output() throws IOException {
        System.out.println("beanName="+beanName);
        Resource resource = resourceLoader.getResource("jvaboy.txt");
        BufferedReader br=new BufferedReader(new InputStreamReader(resource.getInputStream()));
        String s=br.readLine();
        System.out.println("s="+s);
        br.close();
        String address = environment.getProperty("javaboy.address");
        System.out.println("address"+address);

    }
}

@Configuration
@ComponentScan
public class JavaConfig2 {


}
    @Test
    public void testAware() throws IOException {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig2.class);
        AwareService bean = context.getBean(AwareService.class);
        bean.output();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值