老菜鸟的记录,方便以后查阅
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");
}
}