如何实现初始化一个类的时候给属性附初始值

在这里我使用@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 + '\'' +
                '}';
    }
}

`

猜你喜欢

转载自blog.csdn.net/f_a_ker/article/details/109468243
今日推荐