SpringBoot使用@PostConstruct注解导入配置方式

目录
  • 使用@PostConstruct注解导入配置
  • 使用@PostConstruct注解,完成静态对象注入
    • 为什么static对象不可直接使用@Autowired注入?
    • @PostConstruct和@PreDestroy

使用@PostConstruct注解导入配置

通过@PostConstruct注解能够通过一种更友好的方式将配置进行导入

代码如下:

/**
 * 引导类
 *
 * @author zhangzhixiang
 * @date 2018/09/18 14:51:39
 */
@Configuration
public class BootstrapConsts {
    @Value("${file.client.type}")
    private String fileClientType;

    @Value("${file.oss.endPoint}")
    private String endPoint;

    @Value("${file.oss.accessKeyId}")
    private String accessKeyId;

    @Value("${file.oss.accessKeySecret}")
    private String accessKeySecret;

    @Value("${file.oss.bucketName}")
    private String bucketName;

    @Value("${file.oss.rootDir}")
    private String rootDir;

    /**
     * 文件客户端类型
     */
    public static String file_client_type;
    /**
     * OSS地址(不同服务器,地址不同)
     */
    public static String end_point;
    /**
     * OSS键id(去OSS控制台获取)
     */
    public static String access_key_id;
    /**
     * OSS秘钥(去OSS控制台获取)
     */
    public static String access_key_secret;
    /**
     * OSS桶名称(这个是自己创建bucket时候的命名)
     */
    public static String bucket_name;
    /**
     * OSS根目录
     */
    public static String root_dir;

    @PostConstruct
    private void initial() {
        file_client_type = fileClientType;
        end_point = endPoint;
        access_key_id = accessKeyId;
        access_key_secret = accessKeySecret;
        bucket_name = bucketName;
        root_dir = rootDir;
    }
}

使用@PostConstruct注解,完成静态对象注入

为什么static对象不可直接使用@Autowired注入?

Spring/SpringBoot正常情况下不能支持注入静态属性(会报空指针异常)。主要原因在于:Spring的依赖注入实际上是使用Object.Set()进行注入的,Spring是基于对象层面的依赖注入,而静态属性/静态变量实际上是属于类的。

@PostConstruct和@PreDestroy

  • @PostConstruct 为JavaEE5规范开始后Servlet中新增@PostConstruct和@PreDestroy被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。@PostConstruct 在构造函数之后执行,init()方法之前执行。
  • @PreDestroy()方法在destroy()方法之后执行

执行顺序:Constructor >> @Autowired >> @PostConstruct

使用示例

package com.sijing.codeRecord.httpUtil;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSONObject;

@Component
public class HttpStaticUtil {
 @Autowired
 RestTemplate restTemplate;
 private static RestTemplate staticRestTemplate;
 @SuppressWarnings("static-access")
 @PostConstruct
 public void staticVarAssignment() {
  this.staticRestTemplate = restTemplate;
 }

 @SuppressWarnings({ "rawtypes", "unchecked" })
 public static void Post() {
  HttpEntity requestEntity = null;
  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.valueOf("application/json"));
  requestEntity = new HttpEntity(String.format(""), headers);
  JSONObject response = staticRestTemplate.postForObject("http://www.baidu.com", requestEntity, JSONObject.class);
  System.out.println(response);
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springboot @Async 注解如何实现方法异步

    目录 @Async注解如何实现方法异步 一.springboot的App类需要的注解 二.service层的注解 三.调用层 异步注解@Async的使用以及注意事项 第一步开启异步 下面显示配置线程的代码实现 使用@Async导致异步不成功的情况 @Async注解如何实现方法异步 处理大批量数据的时候,效率很慢.所以考虑一下使用多线程. 刚开始自己手写的一套,用了线程池启动固定的线程数进行跑批.但是后来老大考虑到自己手写的风险不好控制,所以使用spring的方法. 这里没有详细介绍,只有简单的d

  • SpringBoot @Autowired注解注入规则介绍

    目录 @Autowired注解注入规则 验证 小结一下 @Autowired注解无法自动注入的错误 @Autowired注解注入规则 @Autowired - 注入默认根据类型,匹配不到则根据bean名字 Spring中注解方式的默认beanName生成规则: 在Spring中,当我们配置一个bean的时候,可以不指定name,这样的话,Spring会生成一个默认的beanName 1. 驼峰形式类名首字母小写:UserService--userService 2. 特殊情况--当类名的首字母和

  • SpringBoot常用注解详细整理

    目录 前言 一.@SpringBootApplication 二.@Bean 三.@Autowired 四.Component家族 五.@RestController 六.@Scope 七.@Configuration 八.@RequsetMapping 八.@GetMapping 九.@Configuration 十.@PostMapping 十一.@PutMapping 十二.@DeleteMapping 十三.@ParhVariable和@RequestParam 十四.@RequestB

  • Springboot常用注解及配置文件加载顺序详解

    Springboot常用注解及底层实现 1.@SpringBootApplication:这个注解标识了一个SpringBoot工程,她实际上是另外三个注解的组合,分别是: @SpringBootConfiguration:源码可以看到,这个注解除了元注解外,实际就只有一个@Configuration,把该类变成一个配置类,表示启动类也是一个配置类: @EnableAutoConfiguration:是开启自动配置的功能,向Spring容器中导入了一个Selector,用来加载ClassPath

  • @SpringBootTest 注解报红问题及解决

    目录 打注解@SpringBootTest的时候不会出现提示 SpringBoot模块中启动类的注解标红 打注解@SpringBootTest的时候不会出现提示 但是又导入了 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 这个开发场景,于是我想

  • SpringBoot 自定义注解之脱敏注解详解

    目录 自定义注解之脱敏注解 一.脱敏后的效果 二.代码 1.脱敏注解 2.定义脱敏类型 3.敏感工具类 4.脱敏序列化信息 小结一下 自己手写的一个高效自定义字符串脱敏注解 自己写了个 仅供参考 自定义注解之脱敏注解 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.需求是把返回到前端的数据进行脱敏,以免造成隐私信息的泄露. 一.脱敏后的效果 这样显示很不好吧,所有信息都泄露了 这样就很好了吧 二.代码 1.脱敏注解 @Retention(RetentionPol

  • SpringBoot使用@PostConstruct注解导入配置方式

    目录 使用@PostConstruct注解导入配置 使用@PostConstruct注解,完成静态对象注入 为什么static对象不可直接使用@Autowired注入? @PostConstruct和@PreDestroy 使用@PostConstruct注解导入配置 通过@PostConstruct注解能够通过一种更友好的方式将配置进行导入 代码如下: /** * 引导类 * * @author zhangzhixiang * @date 2018/09/18 14:51:39 */ @Con

  • SpringBoot中@Import注解的使用方式

    目录 一. @Import引入普通类 二. @Import引入配置类(@Configuration修饰的类) 三 .@Import引入ImportSelector的实现类 3.1 静态import场景(注入已知的类) 3.2 动态import场景(注入指定条件的类) 四. @Import引入ImportBeanDefinitionRegistrar的实现类 前言: @Import注解用来帮助我们把一些需要定义为Bean的类导入到IOC容器里面.下面我们就对@Import注解的使用做一个简单的总结

  • SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

    properties配置文件如下: human.name=Mr.Yu human.age=21 human.gender=male 如何把properties里面的配置绑定到JavaBean里面,以前我们的做法如下: public class PropertiesUtil { public static void getProperties(Person person) throws IOException { Properties properties = new Properties();

  • SpringBoot通过自定义注解实现配置类的自动注入的实现

    目录 前言 实现思路 自定义配置类读取配置 自定义注解 创建子配置Bean 通过反射进行people bean的注入 使用 效果 回顾 延伸 前言 SpringBoot中通过@ConfigurationProperties或@Value注解就可以获取配置文件中的属性定义并绑定到Java Bean或属性上,这也是我们平常使用最多的一种方式.但是小胖在开发过程中就遇到一个问题:在做MQ的开发中,配置文件中会配置多个生产者分别提供不同的业务能力,如果通过@ConfigurationProperties

  • 详解springboot测试类注解

    目录 创建一个TextHello类 注解 主启动类 配置文件格式 区别 创建一个TextHello类 TextHello类的代码如下 @Controller @RequestMapping("/hello") public class TextHello { @GetMapping("/hello") @ResponseBody public String hello(){ return "hello,程程呀"; } } 我是在pom.xml文件

  • springboot的java配置方式(实例讲解)

    1.创建User实体类. @Data public class User { private String username; private String password; private Integer age; } 2.创建UserDao用于模拟数据库交互. public class UserDao{ public List<User> queryUserList() { List<User> result = new ArrayList<User>(); //

  • 详解springboot的多种配置方式

    java配置主要靠java类和一些注解,比较常用的注解有: @Configuration :声明一个类作为配置类,代替xml文件 @Bean :声明在方法上,将方法的返回值加入Bean容器,代替 标签 @Value :基本类型或String属性注入 @PropertySource :指定外部属性文件 后面以Druid连接池配置为例,数据库名称为springboot_test 方式一 <!--pom.xml --> <dependency> <groupId>com.al

  • 解决springboot利用ConfigurationProperties注解配置数据源无法读取配置信息问题

    @ConfigurationProperties是springboot新加入的注解,主要用于配置文件中的指定键值对映射到一个java实体类上.那么它是怎么发挥作用的呢?下面我们将揭开@ConfigurationProperties的魔法. ConfigurationPropertiesBindingPostProcessor这个bean后置处理器,就是来处理bean属性的绑定的,这个bean后置处理器后文将称之为properties后置处理器.你需要知道以下几件事: ioc容器context的e

  • springboot使用之多个filter的执行顺序以及配置方式

    springboot 多个filter的执行顺序以及配置 当项目中有多个filter时,为了便于管理,可以创建一个配置文件,对所有的filter进行管理. 有的方法可能同时需要多个filter依次对其进行过滤,这时候便需要对filter的执行进行优先级的排序.如下: 新建一个配置文件ComponentFilterOrderConfig.java 先生成一个过滤器的bean,再把过滤器的bean注入到FilterRegistrationBean中,并设置一些属性,过滤的url,执行的顺序之类的(o

  • SpringBoot使用spring.config.import多种方式导入配置文件

    目录 简介 导入classpath下的配置文件 导入系统目录下的配置文件 导入Nacos配置中心的配置文件 总结 简介 SpringBoot从2.4.x版本开始支持了导入文件的方式来加载配置参数,与spring.config.additional-location不同的是不用提前设置而且支持导入的文件类型相对来说要丰富很多. 我们只需要在application.properties/application.yml配置文件中通过spring.config.import属性配置需要导入的文件列表即可

随机推荐