zoukankan      html  css  js  c++  java
  • Spring知识点-@Configuration使用

    一、定义

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Configuration {
    
    	@AliasFor(annotation = Component.class)
    	String value() default "";
    
    }
    

    @Configuration的作用,指定一个或多个@Bean方法,由spring加载和生成bean,相当于xml的root标签。

     简介

    二、例子

    @Configuration
     public class AppConfig {
    
         @Bean
         public MyBean myBean() {
             // instantiate, configure and return bean ...
         }
     }
    

    三、如何让spring加载它?

    1、通过ApplicationContext加载

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
     ctx.register(AppConfig.class);
     ctx.refresh();
     MyBean myBean = ctx.getBean(MyBean.class);
     // use myBean ...
     
    

    2、通过xml加载

     <beans>
        <context:annotation-config/>
        <bean class="com.acme.AppConfig"/>
     </beans>
    

    3、通过@ComponentScan

    @ComponentScan("com.acme.app.services")
    

    待加载的类放到扫描包里面

    四、其它用法

    1、@Component

    • 被@Configuration注解的类也是一个@Component
    • @Autowired, @Value都能用
     @Configuration
     public class AppConfig {
    
        @Autowired Environment env;
    
        @Value("${bean.name}") String beanName;
    
        @Bean
        public MyBean myBean() {
            MyBean myBean = new MyBean();
            myBean.setName(env.getProperty("bean.name"));
            return myBean;
        }
    }
    

    2、搭配Import

    @Configuration
    public class DatabaseConfig {
    
        @Bean
        public DataSource dataSource() {
            // instantiate, configure and return DataSource
        }
    }
    
    @Configuration
    @Import(DatabaseConfig.class)
    public class AppConfig {
    
        private final DatabaseConfig dataConfig;
    
        public AppConfig(DatabaseConfig dataConfig) {
            this.dataConfig = dataConfig;
        }
    
        @Bean
        public MyBean myBean() {
            // reference the dataSource() bean method
            return new MyBean(dataConfig.dataSource());
        }
    }
    

    3、搭配Profile区分多环境

    @Profile("development")
    @Configuration
    public class EmbeddedDatabaseConfig {
    
        @Bean
        public DataSource dataSource() {
            // instantiate, configure and return embedded DataSource
        }
    }
    
    @Profile("production")
    @Configuration
    public class ProductionDatabaseConfig {
    
        @Bean
        public DataSource dataSource() {
            // instantiate, configure and return production DataSource
        }
    }
    

    或者用这种

    @Configuration
    public class ProfileDatabaseConfig {
    
        @Bean("dataSource")
        @Profile("development")
        public DataSource embeddedDatabase() { ... }
    
        @Bean("dataSource")
        @Profile("production")
        public DataSource productionDatabase() { ... }
    }
    

    4、加载xml里面的bean

    @Configuration
    @ImportResource("classpath:/com/acme/database-config.xml")
    public class AppConfig {
    
        @Inject DataSource dataSource; // from XML
    
        @Bean
        public MyBean myBean() {
            // inject the XML-defined dataSource bean
            return new MyBean(this.dataSource);
        }
    }
    

    5、多个嵌套使用

    @Configuration
    public class AppConfig {
    
        @Inject DataSource dataSource;
    
        @Bean
        public MyBean myBean() {
            return new MyBean(dataSource);
        }
    
        @Configuration
        static class DatabaseConfig {
            @Bean
            DataSource dataSource() {
                return new EmbeddedDatabaseBuilder().build();
            }
        }
    }
    

     丰极

    欢迎关注微信公众号:丰极,更多技术学习分享。

  • 相关阅读:
    图形用户界面
    集合
    201671010136 泛型类总结
    异常、断言与日志
    [置顶]201671010131《面向对象程序设计课程学习进度条》
    [置顶]201671010131《面向对象程序设计课程学习进度条》
    201671010131《面向对象程序设计课程学习进度条》
    201671010131《面向对象程序设计课程学习进度条》
    201671010131《面向对象程序设计课程学习进度条》
    201671010131《面向对象程序设计课程学习进度条》
  • 原文地址:https://www.cnblogs.com/zhangbin1989/p/14899673.html
Copyright © 2011-2022 走看看