spring boot 상용 클래스 및 인터페이스

4330 단어 JAVAspring
ApplicationContextAware 에서 ApplicationContext 가 져 오기
@Component
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    public SpringContextUtil() {
    }

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static  T getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }

    public static  T getBean(Class> clz) throws BeansException {
        return applicationContext.getBean(clz);
    }
}


Environment Aware 환경 변수 읽 기와 속성 대상 가 져 오기
@Component
 public class MyEnvironment implements EnvironmentAware {
    private Environment environment;
    @Override
    public void setEnvironment(Environment environment) {
           this.environment=environment;
    }
 }

ApplicationEvent ApplicationListener 사용자 정의 이벤트 및 감청
demo   [      ](https://blog.csdn.net/xuyw10000/article/details/78730576)

InitializingBean 은 bean 에 게 초기 화 방법 을 제공 합 니 다. after PropertiesSet 방법 만 포함 하고 이 인 터 페 이 스 를 실현 하 는 클래스 는 bean 을 초기 화 할 때 이 방법 을 실행 합 니 다.효 과 는 bean 의 init - method 속성 사용 이나 @ PostContsuct 주석 사용 과 같 습 니 다.세 가지 방식 의 실행 순서: 먼저 주 해 를 한 다음 에 InitialingBean 인터페이스 에서 정 의 된 방법 을 실행 하고 마지막 으로 init - method 속성 지정 방법 을 실행 합 니 다.
@Component
public class TestInitializingBean implements InitializingBean{
    @Override
    public void afterPropertiesSet() throws Exception {
       //bean       
    }
}

BeanPostProcessor 는 모든 bean 을 예화 할 때 개성 화 된 수정 을 제공 하고 포장 등 post Process After Initialization 을 bean 에서 예화 한 후에 호출 합 니 다. 만약 bean 이 Initializing Bean 을 실현 한다 면 * 이 인터페이스의 after PropertiesSet 방법 을 실행 한 후에 호출 합 니 다. init - method 가 실제 나타 나 면 * init - method 를 실행 한 후에 호출 합 니 다 * /
public class MyBeanPostProcessor implements BeanPostProcessor {
    /**
     *  bean       
     */
    public Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {
        System.out.println("postProcessBeforeInitialization: " + beanName);
        return bean;
    }

    /**
     *  bean       
     */
    public Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException {
        System.out.println("postProcessAfterInitialization: " + beanName);
        return bean;
    }
}

BeanFactory PostProcessor bean 공장 의 bean 속성 처리 용 기 는 통속 적 으로 우리 의 bean 공장 안의 모든 beandefinition (실례 화 되 지 않 음) 데 이 터 를 관리 할 수 있 고 마음대로 속성 을 수정 할 수 있 습 니 다.
@Component
@Slf4j
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        String[] names = beanFactory.getBeanDefinitionNames();
        log.info(JSON.toJSONString(names));
        Iterator it = beanFactory.getBeanNamesIterator();
        while (it.hasNext()) {
            BeanDefinition beanDefinition = beanFactory.getBeanDefinition(it.next());
            log.info(JSON.toJSONString(beanDefinition));
        }
    }
}
CommandLineRunner   ApplicationRunner   
            
  ApplicationRunner        ,                  
@Component
@Slf4j
@Order(value = 2)
public class InitServiceConfiguration implements CommandLineRunner {
    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public void run(String... args) throws Exception {
        Map serviceMap = applicationContext.getBeansOfType(AbstractInitService.class);
        if (serviceMap == null) {
            return;
        }
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
        for (Map.Entry entry : serviceMap.entrySet()) {
            log.info("   :{}", entry.getKey());
            fixedThreadPool.execute(entry.getValue());
        }
        fixedThreadPool.shutdown();
    }
}

좋은 웹페이지 즐겨찾기