springboot知识记录

老菜鸟的记录,方便以后查阅

InitializingBean接口

一个需要被注入为bean的类实现该接口后,会在bean被注入容器之后调用

afterPropertiesSet实现方法来完成指定的操作

示例:

@Component
public class InitTest implements InitializingBean {
    private String user;

    /**
     * 注入bean后为属性赋值
     * @throws Exception e
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        this.user = "tom";
    }
}

EmbeddedValueResolverAware接口

EmbeddedValueResolverAware接口用于简化获取配置文件属性,不用写@Value来获取,而是通过实现类的
setEmbeddedValueResolver注入一个StringValueResolver实例,通过该实例来获取配置文件属性

代码示例:

@Component
public class ValueTest implements EmbeddedValueResolverAware {
    private StringValueResolver resolver;

    /**
     *注入StringValueResolver的bean
     * @param resolver bean
     */
    @Override
    public void setEmbeddedValueResolver(StringValueResolver resolver) {
        this.resolver = resolver;
    }

    /**
     * 根据键值获取配置文件内容
     * @param key 键
     * @return 属性
     */
    public String getPropertiesByKey(String key) {
        StringBuilder stringBuilder = new StringBuilder().append("${").append(key).append("}");
        return resolver.resolveStringValue(stringBuilder.toString());
    }
}

Ordered接口

orderd接口用于在需要注入的bean时,控制注入的优先级,定义了一个getOrder方法,返回值为int型,返回的值越小优先级越高,还有一个接口继承了Ordered接口,PriorityOrdered,若实现了PriorityOrdered接口时优先级高于实现了ordered的bean。

示例代码:

@Component
public class OrderedTest implements Ordered {
    /**
     * 返回值越小,注入容器的优先级越高
     * @return int
     */
    @Override
    public int getOrder() {
        return 0;
    }
}

ApplicationContextAware接口

ApplicationContextAware接口用于获取spring的上下文环境实例,通过实现接口的setApplicationContext方法获取上下文环境,通过上下文环境可以获取容器中指定名称或类型的bean。

代码示例:

@Component
public class SpringBeanUtil implements ApplicationContextAware {
    private static ApplicationContext context;

    /**
     * 实现类的setApplicationContext方法获取spring上下文环境bean
     * @param applicationContext spring上下文环境
     * @throws BeansException e
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringBeanUtil.context == null) {
            SpringBeanUtil.context = applicationContext;
        }
    }

    /**
     * 根据名称获取bean
     * @param name 名称
     * @return bean
     */
    public static Object getBeanByName(String name) {
        return context.getBean(name);
    }

    /**
     * 根据类获取bean
     * @param tClass 类class
     * @param <T> 泛型
     * @return bean
     */
    public static <T> T getBeanByClass(Class<T> tClass) {
        return context.getBean(tClass);
    }

    /**
     * 根据名称和类获取bean
     * @param name bean名称
     * @param tClass 类class
     * @param <T> 泛型
     * @return bean
     */
    public static <T> T getBeanByNameAndClass(String name,Class<T> tClass){
        return context.getBean(name,tClass);
    }
}

ApplicationRunner接口

ApplicationRunner接口用于在spring项目启动之后紧接着执行的逻辑,实现该接口的run方法即可,由于该方法执行在容器初始化完成之后,是可以操作所有已经注入的bean的。

代码示例:

@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
    @Autowired
    private RedisTopicUtil redisTopicUtil;

    /**
     * 项目启动后执行此方法
     * @param args 项目启动时的运行参数
     * @throws Exception e
     */
    @Override
    public void run(ApplicationArguments args) throws Exception {
        //项目启动时订阅redis topic
        redisTopicUtil.subTopic("oa_topic");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值