Spring注解(环境)

以数据库为例:

 引入 c3p0数据源maven坐标

 数据库驱动

 

@Configuration
@PropertySource("classpath:/db.config.properties")
public class ProfileConfig implements EmbeddedValueResolverAware {
   //方法一
    @Value("${db.user}")
    private String user;
  
    //方法三 通过值解析器  
    private StringValueResolver valueResolver;
    
    private String driverClass;
    
    @Profile("test")
    @Bean(name="testDataSource")                                            //方法二
    public ComboPooledDataSource dataSourceTest(@Value("${db.password}") String pwd) throws Exception{
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser("root");
        dataSource.setPassword(pwd);
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setDriverClass(driverClass);
        return dataSource;
    }

@Profile("dev")
@Bean(name="devDataSource") public ComboPooledDataSource dataSourceDev() throws Exception{ ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setUser(user); dataSource.setPassword("root"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/dev"); dataSource.setDriverClass(driverClass); return dataSource; } //重写方法 public void setEmbeddedValueResolver(StringValueResolver resolver) { this.valueResolver = resolver; driverClass = valueResolver.resolveStringValue("${db.driverClass}"); } }

 

这样就可以将数据源注册到容器中了

 

如何激活呢? 通过@Profile !

  指定组件在哪个环境的情况下 才能被注册到容器中,不指定任何环境下都能注册。

  只有当激活的bean 才能被注册进来

 加了环境表示@Profile 的bean  只有当环境被激活的 才可以注册到容器  默认是default

激活方式:

使用参数方式激活

使用idea的界面激活

通过代码的方式激活:

public class test {
    @Test 
    public void test01(){  
        //使用无参构造器  创建applicationContext  (详情自己研究下有参构造器的方法)
        AnnotationConfigApplicationContext applicationContext  =new AnnotationConfigApplicationContext();
       //设置需要激活的环境
        applicationContext.getEnvironment().setActiveProfiles("dev","test"); //可以设置多个
       //注册主配置类
        applicationContext.register(Profile.class);    
       //启动刷新容器
       applicationContext.refresh();
      }  
} 

 

@Profile 还可以标注在类上: 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能生效

没有标注@Profile的ben, 在任何环境下都是加载的

 

 

IOC小结:

  

 

 

 

posted @ 2019-04-07 16:06  toov5  阅读(356)  评论(0编辑  收藏  举报