1. 程式人生 > 其它 >SpringBoot容器相關注解

SpringBoot容器相關注解

1.@Configuration 配置類

User bean類:

package com.ttpfx.bean;

public class User {
    private String name;
    private int age;
}

AppConfig 配置類:

@Configuration(proxyBeanMethods = false)
public class AppConfig {
    @Bean
    public User user() {
        return new User("zhangsan", 30);
    }
}

主程式類:

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);

        // 容器獲取User
        User user1 = context.getBean(User.class);
        User user2 = context.getBean(User.class);

        // 呼叫AppConfig方法獲取User
        AppConfig appConfig = context.getBean(AppConfig.class);
        User user3 = appConfig.user();

        System.out.println(user1 == user2);
        System.out.println(user1 == user3);
    }
}

proxyBeanMethods屬性說明:
proxyBeanMethods預設為true,為true時呼叫配置類的方法得到的User類是容器中的元件類,即user1 == user3 為true
proxyBeanMethods為false時,呼叫配置類的方法得到的User類是重新例項化的,即user1 == user3 為false

2. @Import

匯入元件,可用於匯入第三方類,匯入元件名為全類名

Pet bean類:

package com.ttpfx.bean;

public class Pet {
    private String name;
}

AppConfig 配置類:

@Configuration()
@Import({Pet.class})
public class AppConfig {
}

主程式類:

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);
        System.out.println(context.containsBean("com.ttpfx.bean.Pet"));
    }
}

3. @Conditional系列

當符合某種條件時,配置類才會生效:

@Configuration
//@ConditionalOnBean(Pet.class)
@ConditionalOnMissingBean(Pet.class)
public class AppConfig {
    @Bean
    public User user() {
        return new User("zhangsan", 30);
    }
}

4. @ImportResource

引入xml配置檔案

配置類:

@Configuration
@ImportResource("beans.xml")
public class AppConfig {
}

xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="zhangsan" class="com.ttpfx.bean.User">
        <property name="name" value="張三"></property>
        <property name="age" value="20"></property>
    </bean>

    <bean id="lisi" class="com.ttpfx.bean.User">
        <property name="name" value="李四"></property>
        <property name="age" value="20"></property>
    </bean>
</beans>

5. ConfigurationProperties 配置繫結

application.properties:

user.wangwu.name=wangwu
user.wangwu.age=30

用法1:@ConfigurationProperties + @Component

User:

@Component
@ConfigurationProperties(prefix = "user.wangwu")
public class User {
    private String name;
    private int age;
}

用法2:@ConfigurationProperties + @EnableConfigurationProperties

User:

@ConfigurationProperties(prefix = "user.wangwu")
public class User {
    private String name;
    private int age;
}

配置類:

@Configuration
@EnableConfigurationProperties({User.class})
public class AppConfig {
}