学妹问的Spring Bean常用配置,我用最通俗易懂的讲解让她学会了 (3)

新建一个 ValuePropertiesConfig 类,内容如下:

@Configuration
@PropertySource("classpath:value.properties")
public class ValuePropertiesConfig {

    @Value("${name}")
    private String name;

    @Value("${age}")
    private int age;

    public void output() {
        System.out.println("姓名:" + name + " 年纪:" + age);
    }
}

@PropertySource 注解用于指定载入哪个配置文件(value.properties),classpath: 表明从 src 或者 resources 目录下找。

注意此时 @Value("") 的双引号中为 $ 符号而非 # 符号,{} 中为配置文件中的 key。

新建一个 ValuePropertiesMain 类,内容如下:

public class ValuePropertiesMain {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ValuePropertiesConfig.class);

        ValuePropertiesConfig service = context.getBean(ValuePropertiesConfig.class);
        service.output();

        context.close();
    }
}

程序运行结果如下:

姓名:³ÁĬÍõÈý 年纪:18

“糟糕,二哥!中文乱码了!”

“不要怕,三妹,问题很容易解决。”

首先,查看 properties 文件的编码方式。

学妹问的Spring Bean常用配置,我用最通俗易懂的讲解让她学会了

如果不是 UTF-8 就改为 UTF-8。同时,确保修改编码方式后的 properties 文件中没有中文乱码。

然后,在 @PropertySource 注解中加入编码格式。

@PropertySource(value = "classpath:value.properties",  encoding = "UTF-8")

再次运行程序后,乱码就被风吹走了。

姓名:沉默王二 年纪:18
03、Bean 的初始化和销毁

“二哥,据说在实际开发中,经常需要在 Bean 初始化和销毁时加一些额外的操作,你能给我详细说说怎么实现吗?”

“没问题啊。”

1)init-method/destroy-method

新建一个 InitDestroyService 类,内容如下:

public class InitDestroyService {
    public InitDestroyService() {
        System.out.println("构造方法");
    }

    public void init() {
        System.out.println("初始化");
    }

    public void destroy {
        System.out.println("销毁");
    }
}

InitDestroyService() 为构造方法,init() 为初始化方法,destroy() 为销毁方法。

新建 InitDestroyConfig 类,内容如下:

@Configuration
public class InitDestroyConfig {
    @Bean(initMethod = "init",destroyMethod = "destroy")
    public InitDestroyService initDestroyService() {
        return new InitDestroyService();
    }
}

@Bean 注解的 initMethod 用于指定 Bean 初始化的方法,destroyMethod 用于指定 Bean 销毁时的方法。

新建 InitDestroyMain 类,内容如下:

public class InitDestroyMain {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InitDestroyConfig.class);
        InitDestroyService service = context.getBean(InitDestroyService.class);
        System.out.println("准备关闭容器");
        context.close();
    }
}

程序运行结果如下:

构造方法
初始化
准备关闭容器
销毁

也就是说,初始化方法在构造方法后执行,销毁方法在容器关闭后执行。

2)@PostConstruct/@PreDestroy

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwzyg.html