在这里我使用@value注解给类的属性做初始化赋值.要注意一点在spring项目中必须将该类注册到ioc容器中,并且取得该类的实例时(就是创建一个对象的时候)不能使用手动new 必须从容器中获取 即@Autowired或者@Resource注解` @value在属性上 或者set方法上都可以实现初始化功能,但set优先级更高,因为原理就是set注入
@Value与@PropertySource配合使用 可以获取到配置文件的值,在企业项目中将重要的值放到配置文件中方便查阅和修改以及校验,
步骤1:在src/main/resources下新建一个配置文件User.properties,用来给User初始化赋值
步骤2:@PropertySource(“classpath:User.properties”)找到配置文件的位置
步骤3:@value(“xxx”)获取配置文件中的值
具体借鉴该博客:@Value与@PropertySource配合使用
不多bb上代码
package com.csdn.demo_ds.属性初始化;
import org.aspectj.weaver.ast.Var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.sql.SQLOutput;
/**
* @author Administrator
* @ClassName test
* @Description
* @date 2020-11-03 11:31
*/
@RestController
public class test {
@Autowired
A a;
@Autowired
User user;
@GetMapping("first")
public String test(){
return a.toString();
}
@GetMapping("num")
public String num(){
return user.toString();
}
}
@Component
class A{
@Value("nihao")
private String name;
private int age;
public String getName() {
return name;
}
@Value("xiaoming")
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public A(String name, int age) {
this.name = name;
this.age = age;
}
public A() {
}
@Override
public String toString() {
return "A{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
user类代码
package com.csdn.demo_ds.属性初始化;
/**
* @author Administrator
* @ClassName user
* @Description
* @date 2020-11-03 13:57
*/
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @author csy
* 使用@PropertySource引入外部配置文件
* @Component或@Configuration将该类交由IOC容器保管(这里有一个很奇怪的地方,明明使用了@Bean在配置类中已经注入了这个Bean,但是如果
* 这里只使用了@PropertySource依然无法对User赋值,所以这里需要再加上一个@Component,很奇怪)
*/
@PropertySource("classpath:User.properties")
@Component
public class User {
@Value("${user.id}")
private Integer id;
@Value("${user.userName}")
private String userName;
@Value("${user.password}")
private String password;
@Value("${user.tel}")
private String tel;
@Value("用户数据")
private String defaultMessage;
public void init() {
System.out.println("User创建后调用初始化方法..........");
}
public void destory() {
System.out.println("User销毁后调用销毁方法....通过@Bean的destoryMethod指定销毁方法......");
}
public User() {
System.out.println("User创建完成...通过@Bean的initMethod调用初始化方法............");
}
public User(Integer id, String userName, String password, String tel, String defaultMessage) {
this.id = id;
this.userName = userName;
this.password = password;
this.tel = tel;
this.defaultMessage = defaultMessage;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getDefaultMessage() {
return defaultMessage;
}
public void setDefaultMessage(String defaultMessage) {
this.defaultMessage = defaultMessage;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", tel='" + tel + '\'' +
", defaultMessage='" + defaultMessage + '\'' +
'}';
}
}
`