博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知识点②:spring boot 注入 / 静态注入
阅读量:6605 次
发布时间:2019-06-24

本文共 2587 字,大约阅读时间需要 8 分钟。

  hot3.png

springboot 注入 / 静态注入

  1. 参数配置:application.properties
sc.crm.upDirPath=
  1. 注入:

spring boot 的任意组件都能使用,这里声明了一个简单组件 @Component,该注解通常用来定义一些需要配置的常量或者用于注入的工具类,而不用手动去 new 了

@Componentpublic class CrmProperties {    @Value("${sc.crm.upDirPath}")    private String uploadPath;    public String getUploadPath() {        return uploadPath;    }    public void setUploadPath(String uploadPath) {        this.uploadPath = uploadPath;    }}
  1. 使用:直接注入
@Servicepublic class CustomerServiceImpl implements CustomerService {    @Autowired    private CrmProperties crmProperties;    //也可以定义为属性/字段直接使用    @Value("${sc.crm.upDirPath}")    private String uploadPath;    }
  1. 静态注入:

4.1. 实现 spring 的一个获取上下文的工具类

import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;/** * Spring工具类,获取Spring上下文对象等 */@Componentpublic class SpringContextUtil implements ApplicationContextAware {    private static ApplicationContext applicationContext = null;    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        if(SpringContextUtil.applicationContext == null){            SpringContextUtil.applicationContext  = applicationContext;        }    }    public static ApplicationContext getApplicationContext() {        return applicationContext;    }    public static Object getBean(String name){        return getApplicationContext().getBean(name);    }    public static 
T getBean(Class
clazz){ return getApplicationContext().getBean(clazz); } public static
T getBean(String name,Class
clazz){ return getApplicationContext().getBean(name, clazz); }}

4.2. 静态注入:

public final class UpDownLoadUtil {    private static String uploadPath ;    //通过静态代码块,给变量赋值    static{        CrmProperties crmProperties = SpringContextUtil.getBean(CrmProperties.class);        uploadPath = crmProperties.getUploadPath();    }        //将构造方法私有化,所有静态工具只能通过静态调用    private UpDownLoadUtil(){        throw new AssertionError();    }        public static void testUtil(){        systom.out.println(uploadPath);    }    }

到这里,就可以在静态方法中正常使用该配置常量了

=============== 分割线 ===============

==注意:典型错误示例,这样写虽然不会报错,但是根据类的加载机制,这里不能正确的获取到想要的参数,最后输出只有null,切记==

//错误的使用方法@Value("${sc.gp.url.db}")private static String url_DB;@PostMapping("/rest1")public static void test1() {    String s = url_DB;    System.out.println(s);}

转载于:https://my.oschina.net/ss6/blog/1626014

你可能感兴趣的文章
我遇到的CocoaPods的问题(也许后期会解决,持续更新)
查看>>
c语言操作符小结
查看>>
ORA-02449: 表中的唯一/主键被外键引用
查看>>
linux命令详解之df
查看>>
javascript的方法
查看>>
瞻博-Juniper-SSG-双机高可用(HA)平滑升级经验分享篇
查看>>
如何利用 JConsole观察分析Java程序的运行,进行排错调优
查看>>
IntelliJ IDEA 注册码
查看>>
phpcms基本知识
查看>>
部署国内YUM源
查看>>
nginx 报错
查看>>
负载均衡七层 Haproxy
查看>>
大数据下基于Tensorflow框架的深度学习示例教程
查看>>
Linux性能测试top衍生命令atop/htop/slaptop
查看>>
Nginx配置文件详细说明
查看>>
写给iOS程序员的命令行使用秘籍
查看>>
数据加密解密初探
查看>>
DAVINCI DM365-DM368开发攻略——开发环境搭建(DVSDK4.02)
查看>>
我的友情链接
查看>>
jSearch 上码云推荐啦(@红薯 大大亲推)!!!
查看>>