• @Configuration使用


     

    前言

    @Configuration 用于定义配置类,可替换XML配置文件,被注解的类内部包含一个或多个@Bean注解方法。可以被AnnotationConfigApplicationContext或者AnnotationConfigWebApplicationContext 进行扫描。用于构建bean定义以及初始化Spring容器。

    实例

    @Configuration 加载Spring方法

    Car.java

    public class Car {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

    定义Config类

    @Configuration
    public class Config {
        public Config() {
            System.out.println("TestConfig容器初始化...");
        }
    
        @Bean(name = "getMyCar")
        public Car getCar() {
            Car c = new Car();
            c.setName("dankun");
            return c;
        }
    }
    

    实例化

    public void testConfig() {
            ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
            Car car = (Car)context.getBean("car");
            System.out.println(car.getName());
        }
    // 输出
    // TestConfig容器初始化...
    // dankun
    

    @Configuration + @Component

    @Configuration也附带了@Component的功能。所以理论上也可以使用@Autowared功能。上述代码可以改成下面形式
    Car.java

    @Component
    public class Car {
        @Value("dankun")
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

    Config.java

    @Configuration
    @ComponentScan("com.wuyue.annotation")
    public class Config {
        public Config() {
            System.out.println("TestConfig容器初始化...");
        }
    

    测试主入口

    public class TestConfig {
        @Test
        public void testConfig() {
            ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
            Car car = (Car)context.getBean("car");
            System.out.println(car.getName());
        }
    }
    // 输出
    // TestConfig容器初始化...
    // dankun
    

    总结

    • @Configuation等价于<Beans></Beans>
    • @Bean 等价于<Bean></Bean>
    • @ComponentScan等价于<context:component-scan base-package="com.dxz.demo"/>
    • @Component 等价于<Bean></Bean>

    @Bean VS @Component

    • 两个注解的结果是相同的,bean都会被添加到Spring上下文中。
    • @Component 标注的是类,允许通过自动扫描发现。@Bean需要在配置类@Configuation中使用。
    • @Component类使用的方法或字段时不会使用CGLIB增强。而在@Configuration类中使用方法或字段时则使用CGLIB创造协作对象

    假设我们需要将一些第三方的库组件装配到应用中或者 我们有一个在多个应用程序中共享的模块,它包含一些服务。并非所有应用都需要它们。

    如果在这些服务类上使用@Component并在应用程序中使用组件扫描,我们最终可能会检测到超过必要的bean。导致应用程序无法启动
    但是我们可以使用 @Bean来加载

    因此,基本上,使用@Bean将第三方类添加到上下文中。和@Component,如果它只在你的单个应用程序中

  • 相关阅读:
    epoll oneshot
    回望五月
    都知道的copy_from_user
    ixgbe 驱动 为xxx驱动做准备1
    面试问题集锦
    数据治理
    阅读
    hive 数据仓库面试题目集锦
    面试小问题集锦
    Scala学习笔记~尚硅谷学习视频
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/14269474.html
Copyright © 2020-2023  润新知