Spring's IoC (Inversion of Control) Ensamblaje automático de 4 Bean, completamente en modo Java

En el artículo anterior , las anotaciones de apertura se especificaron en el archivo de configuración y se especificó el paquete de análisis de anotaciones. Y utilizado @Autowired(ensamblado automático de atributos de colaboración), @Component(declarado como objeto Springgestionado bean), @Value(tipo simple designado de valor de atributo) para simplificar beanel proceso de creación de instancias. En xmlla configuración abierta de la siguiente manera:

<!--  配置注解扫描。 指定要扫描的包,这个包下的注解就会生效 -->
<context:component-scan base-package="com.weizu.pojo"/>
<context:annotation-config/>
@Component
public class User {
    
    
    @Value("14")
    private int age;
    @Value("张三")
    private String name;
    @Autowired
    private UserAddress address;

    @Override
    public String toString() {
    
    
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", address=" + address +
                '}';
    }
}

Aquí, habrá una forma más conveniente de escribir:
Estructura del proyecto:
Inserte la descripción de la imagen aquí
User.java

@Component
public class User {
    
    
    @Value("14")
    private int age;
    @Value("张三")
    private String name;
    @Autowired
    private UserAddress address;

    @Override
    public String toString() {
    
    
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", address=" + address +
                '}';
    }
}

UserAddress.java

/**
 * @Component等价于
 * <bean id="address" class="com.weizu.pojo.UserAddress" p:address="西安"/>
 */
@Component
public class UserAddress {
    
    
    @Value("西安")
    private String address;

    @Override
    public String toString() {
    
    
        return "UserAddress{" +
                "address='" + address + '\'' +
                '}';
    }
}

config.java

// @Configuration 也使用了@Component,也会注册到容器中,被Spring托管
// @Configuration代表这是一个配置类,也就是我们之前的beans.xml
@Configuration
@ComponentScan("com.weizu.pojo")
public class config {
    
    

    // @Bean 相当于之前写的bean标签
    // 这个方法的名字,就相当于bean标签中的id属性
    // 这个方法的返回值类型,也就是bean标签中的class属性
    // 最终的返回值,也就是要注入到bean的对象
    @Bean
    public User getUser(){
    
    
        return new User();
    }
}

La prueba se utiliza, pero AnnotationConfigApplicationContextno ClassPathXmlApplicationContext:

public class myTest {
    
    

    @Test
    public void Test(){
    
    
        // create and configure beans
        ApplicationContext context = new AnnotationConfigApplicationContext(config.class);
        User user = context.getBean("getUser", User.class);
        System.out.println(user);
    }
}

Efecto:
Inserte la descripción de la imagen aquí
Descubrí que no hay beans.xmlconfiguración del archivo en el artículo anterior , y se han completado el beanalojamiento y la inyección correctos .
@ConfigurationTambién se usa @Component, también se registrará en el contenedor y se Springadministrará, lo @Configurationque significa que esta es una clase de configuración, que es la que usamos antes beans.xml.
@BeanEquivalente a la beanetiqueta escrita anteriormente

  • El nombre de este método es equivalente beanal atributo id en la etiqueta
  • El tipo de valor de retorno de este método, que es beanel classatributo de la etiqueta.
  • El valor de retorno final, que es beanel objeto que se inyectará.

@ComponentScan("com.weizu.pojo")Se especifica la ruta del paquete de escaneo.

Este tipo de método de anotación puro SpringBootse puede ver en todas partes de China.


Dirección de video: https://www.bilibili.com/video/BV1WE411d7Dv?p=15

Supongo que te gusta

Origin blog.csdn.net/qq_26460841/article/details/115052854
Recomendado
Clasificación