spring学习(二) —— 高级装配

7 篇文章 0 订阅

一、注解解释

  1. @Profile(""):通过profile注解来指定环境,只有与运行环境相同的bean才会被注册到spring上下文中
  2. @Primary:spring上下文中有多个相同BeanID的时候,使用自动装配注入方式会引起程序异常,使用primary类指定spring在注入多bean的时候优先注入哪个
  3. @Qualifier:自定义BeanId可以与@Component和@Bean一起使用,同时可以和@Autowired一起使用,指定注入Bean的名称
  4. @Scope:spring容器中的一个作用域,在 Spring容器中具有以下几种作用域:常用作用域singleton(单例)prototype(多例)

二、装配Bean

继续上一个测试demo,创建test2

  •  创建接口
package com.test.spring.test2;

public interface Dog {
    String wangWangWang();
}
  • 创建两个实现类,并注册到spring容器中
package com.test.spring.test2;

import org.apache.catalina.core.ApplicationContext;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;


@Primary
@Component
public class DaLangGou implements Dog {
    @Override
    public String wangWangWang() {
        String str = "我是大狼狗";
        System.out.println(str);
        return str;
    }
}
package com.test.spring.test2;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;


@Component
public class XiaoLangGou implements Dog {

    @Override
    public String wangWangWang() {
        String str = "我是小狼狗~";
        System.out.println(str);
        return str;
    }
}
  • 创建javaConfig
package com.test.spring.test2;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
public class JavaConfig {
}
  • 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
public class Test2 {

    @Autowired
    private Dog dog;

    @Test
    public void contextLoads() {
        dog.wangWangWang();
    }
}

 由于DaLangGou类使用了@Primary所以会优先装配

三、使用自定义BeanID方式

  • 修改实现类
//@Primary
@Component
@Qualifier("daGou")
public class DaLangGou implements Dog {
    @Override
    public String wangWangWang() {
        String str = "我是大狼狗";
        System.out.println(str);
        return str;
    }
}
@Component
@Qualifier("xiaoGou")
public class XiaoLangGou implements Dog {

    @Override
    public String wangWangWang() {
        String str = "我是小狼狗~";
        System.out.println(str);
        return str;
    }
}
  • 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
public class Test2 {

    @Autowired
    @Qualifier("xiaoGou")
    private Dog dog;

    @Test
    public void contextLoads() {
        dog.wangWangWang();
    }
}

由于使用自定义beanID方式,在装配时需要指定BeanID的名称

四、设置运行环境

  •  修改实现类,设置运行环境
//@Primary
@Component
@Profile("pro")
//@Qualifier("daGou")
public class DaLangGou implements Dog {
    @Override
    public String wangWangWang() {
        String str = "我是大狼狗";
        System.out.println(str);
        return str;
    }
}
@Component
@Profile("dev")
//@Qualifier("xiaoGou")
public class XiaoLangGou implements Dog {

    @Override
    public String wangWangWang() {
        String str = "我是小狼狗~";
        System.out.println(str);
        return str;
    }
}
  • 测试
/**
 * @ActiveProfiles
 * 指定使用的那个环境来创建,只有pro或没有指定环境的bean会被创建
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
@ActiveProfiles("pro")
public class Test2 {

    @Autowired
    //@Qualifier("daGou")
    private Dog dog;

    @Test
    public void contextLoads() {
        dog.wangWangWang();
    }
}

五、读取配置文件

  • application.yml

  • 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
@PropertySource("classpath:application.yml")
public class Test2 {

    /**
     * 读取配置文件注解方式和使用Environment方式
     */
    @Autowired
    private Environment env;

    @Value("${kkkk}")
    private String str;

    @Test
    public void testEnv(){
        System.out.println(env.getProperty("kkkk"));
        System.out.println(str);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值