Spring注解开发
今天,学习Spring的自动注入
@Value注解
使用@Value注解来注入值
1)在com.liuzhuo.config包下,创建新的配置类MainConfigOfProperty:
@Configuration
public class MainConfigOfProperty {
@Bean
public Person person() {
return new Person();
}
}
2)在com.liuzhuo.test包下,创建新的测试类:
public class PropertyTest {
private AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfProperty.class);
@Test
public void test01() {
printBeanName(applicationContext);
Person person = (Person) applicationContext.getBean("person");
System.out.println(person);
applicationContext.close();
}
private void printBeanName(AnnotationConfigApplicationContext applicationContext) {
String[] names = applicationContext.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
}
3) 运行测试方法:test01
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
mainConfigOfProperty
person
Person{name='null', age=null}
十月 16, 2018 5:34:32 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2ff5659e: startup date [Tue Oct 16 17:34:31 CST 2018]; root of context hierarchy
Process finished with exit code 0
我们能看到,打印出来的Person对象的属性都是null。
4)修改Person类
public class Person {
/*
* value:
* 1.使用直接值,比如字符串,数值等
* 2.使用SpEL表达式,#{}
* 3.使用${},获取资源文件中的数据
* */
@Value("张三")
private String name;
@Value("#{20-2}")
private Integer age;
·····
}
5)再次运行test01:
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
mainConfigOfProperty
person
Person{name='张三', age=18}
十月 16, 2018 5:37:41 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2ff5659e: startup date [Tue Oct 16 17:37:41 CST 2018]; root of context hierarchy
Process finished with exit code 0
@PropertySource注解
使用@PropertySource注解来获取资源配置文件中的数据。
1)在resource包下,创建person.properties文件:
person.nickName=小张三
2) 修改Person类:
添加nickName属性和对应的get、set方法:
public class Person {
/*
* value:
* 1.使用直接值,比如字符串,数值等
* 2.使用SpEL表达式,#{}
* 3.使用${},获取资源文件中的数据
* */
@Value("张三")
private String name;
@Value("#{20-2}")
private Integer age;
@Value("${person.nickName}")
private String nickName;
·····
}
3)在配置文件中,加入资源文件的扫描:
@PropertySource(value = “classpath:person.properties”)
@Configuration
@PropertySource(value = "classpath:person.properties")
public class MainConfigOfProperty
这里的@PropertySource(value = “classpath:person.properties”),相当于以前在xml中的配置的
<context:property-placeholder location=”person.properties”/>,如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--包扫描、只要标注了@Controller、@Service、@Repository、@Component都会自动注入到容器中-->
<!--<context:component-scan base-package="com.liuzhuo"/>-->
<!--扫描资源文件-->
<context:property-placeholder location="person.properties"/>
<!--以前的开发模式,使用配置文件-->
<bean id="person" class="com.liuzhuo.bean.Person" init-method="" destroy-method="">
<property name="name" value="zhangsan"/>
<property name="age" value="18"/>
</bean>
</beans>
4) 运行test01:
mainConfigOfProperty
person
Person{name='张三', age=18, nickName='小张三'}
这里的昵称,小张三也打印出来了。