新建一个 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 文件的编码方式。
如果不是 UTF-8 就改为 UTF-8。同时,确保修改编码方式后的 properties 文件中没有中文乱码。
然后,在 @PropertySource 注解中加入编码格式。
@PropertySource(value = "classpath:value.properties", encoding = "UTF-8")再次运行程序后,乱码就被风吹走了。
姓名:沉默王二 年纪:1803、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 类,内容如下:
@Configurationpublic 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