3.1 Spring高级话题: Spring Aware

3.1 Spring高级话题: Spring Aware

在这里插入图片描述
3.1 Spring Aware

1.Spring最大的亮点就是就是Bean对Spring存在是没有意识的,即使换成Google Guice框架(Bean之间的耦合是很低的)
2.Spring Aware: 使用 Spring自己的资源来开发(Bean意识到Spring的存在),叫做Aware.
   -> 不能替换为其他容器,因为此时已经和Spring耦合起来

Spring提供的Aware接口

1.BeanNameAware
  1.1 获得容器中Bean的名称
2.BeanFactoryAware
  2.1 获取当前BeanFactory -> 可以调用容器的服务
3.ApplicationContextAware*
  3.1 获取当前的Application context -> 可以调用容器服务
4.MessageSourceAware
  4.1 获得message source 可以获取文件信息
5.ApplicationEventPublisherAware
  5.1 应用时间发布器,可以发布事件
6.ResourceLoaderAware
  6.1 获得资源加载器,可以获取外部资源
package com.demo.bug.service;

import com.demo.bug.DI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.*;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class AwareService implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, MessageSourceAware, ApplicationEventPublisherAware, ResourceLoaderAware {

    private String beanName;
    private BeanFactory beanFactory;
    private ApplicationContext applicationContext;
    private ApplicationEventPublisher applicationEventPublisher;
    private MessageSource messageSource;
    private ResourceLoader resourceLoader;

    /**
     * BeanNameAware
     *
     * @param s
     */
    @Override
    public void setBeanName(String s) {
        this.beanName = s;
    }


    /**
     * BeanFactoryAware
     *
     * @param beanFactory
     * @throws BeansException
     */
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }

    /**
     * ApplicationContextAware
     *
     * @param applicationContext
     * @throws BeansException
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    /**
     * ApplicationEventPublisherAware
     *
     * @param applicationEventPublisher
     */
    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

    /**
     * MessageSourceAware
     *
     * @param messageSource
     */
    @Override
    public void setMessageSource(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    /**
     * ResourceLoaderAware
     *
     * @param resourceLoader
     */
    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }

    public void test() {

        /**
         * 当前调用的Bean的名字
         */
        String beanName = this.beanName;
        System.out.println("beanName:" + beanName);

        /**
         * 当前bean工厂
         */
        DI bean = this.beanFactory.getBean(DI.class);
        System.out.println("bean:" + bean);

        /**
         * 当前上下文
         */
        long startupDate = this.applicationContext.getStartupDate();
        System.out.println("项目启动时间:" + new Date(startupDate));

        /**
         * event事件
         */
        this.applicationEventPublisher.publishEvent("event");

        /**
         * message
         */

//        this.messageSource.getMessage()

        /**
         * 获取资源加载 resourceLoader
         */
        Resource resource = this.resourceLoader.getResource("classpath:" + this.getClass().getName().replace(".", "/")+".java");


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值