怎样在bean注入到spring容器时属性传入默认值
@Component
public class Dog {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
首先创建一个Dog类,有set get方法和一个toString方法
@Configuration
//@Import(MyImportSelector.class)
@ComponentScan("com.meng")
public class MainConfig {
}
然后在配置类中扫描包,将Dog注入到spring容器。
@Test
public void test001(){
ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
String[] names = context.getBeanDefinitionNames();
for(String name : names){
System.out.println(name);
}
Dog dog = (Dog) context.getBean("dog");
System.out.println(dog);
}
最后启动spring容器,并获取dog对象,查看打印结果:
四月 23, 2019 9:32:55 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@4141d797: startup date [Tue Apr 23 21:32:55 CST 2019]; root of context hierarchy
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
dog
Dog{name='null', age='null'}
Process finished with exit code 0
可以看出Dog类的name与age属性没有被赋值,那么怎样赋值呢
@Component
public class Dog {
@Value("旺财")
private String name;
@Value("#{20-17}")
private String age;
在Dog类的属性上加入@Value注解就可以对属性进行赋值,而且还可以进行SpEl操作,而且还能读取配置文件中的内容,这个稍后在做演示,在这里,第一个是直接赋值,第二个是SpEl对整数做加减乘除操作。查看打印结果:
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
dog
Dog{name='旺财', age='3'}
Process finished with exit code 0
可以看到Dog类中的属性已经不是null了。
@Configuration
//@Import(MyImportSelector.class)
@ComponentScan("com.meng")
@PropertySource(value={"classpath:/dog.properties"})
public class MainConfig {
}
首先在配置类中加入@PropertySource注解,添加配置文件的类路径,加载这个配置文件。
@Value("旺财")
private String name;
@Value("#{20-17}")
private String age;
@Value("${dog.sax}")
private String sax;
public String getName() {
return name;
}
dog.sax=男
然后在sax属性上加入注解${}符号表示从配置文件中获取key为dog.sax的值,并赋给sax属性。查看打印结果:
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
dog
Dog{name='旺财', age='3', sax='男'}
可以看出,sax属性的值已经从配置文件中读取出来并且赋值成功。