【开端】通过springboot框架创建对象

日常创建对象的方式

UserService userService = new UserService()

这中方式创建对象,是程序运行中,才会创建的对象。在web中,我们需要再web服务器启动完成就创建一系列的对象。这是就可以把创建对象的任务交给spring的IOC框架。

例如创建UserService 对象

    public UserService getUserService() {
        if (userService == null) {
            userService = Application.getBean(UserService.class);
        }
        return userService;
    }

通过实现 ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> , EnvironmentAware交给spring框架

将创建对象的权利

    public UserService getUserService() {
        if (userService == null) {
            userService = Application.getBean(UserService.class);
        }
        return userService;
    }
public class Application implements ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> , EnvironmentAware {
    private static final Log logger = LogFactory.getLog(Application.class);
    private static ApplicationContext applicationContext; // Spring应用上下文环境
    private static String applicatioName;
    private static String appName;
    private static volatile Map<Class<?>, Object> beanMap = new ConcurrentHashMap<>();
    private static boolean isSetApplicationContext = false;
    private static Properties defaultProperties = new Properties();

    private static Environment environment;

    /**
     * 获取对象
     *
     * @param name
     * @return Object 一个以所给名字注册的bean的实例
     * @throws BeansException
     */
    public static Object getBean(String name) throws BeansException {
        if (getApplicationContext() != null && getApplicationContext().containsBean(name)) 
        {
            return getApplicationContext().getBean(name);
        }
        return null;
    }
}

ApplicationContextAware 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法。

我们在ApplicationContextAware的实现类中,就可以通过这个上下文环境对象得到Spring容器中的Bean。

  看到—Aware就知道是干什么的了,就是属性注入的,但是这个ApplicationContextAware的不同地方在于,实现了这个接口的bean,当spring容器初始化的时候,会自动的将ApplicationContext注入进来

我们拿到 IOC 容器的方式有3种,使用ApplicationContext接口下的三个实现类:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext, 但是 SpringBoot 中,IOC 配置文件都被简化了,无法通过上述3种方式拿到 IOC 容器,但是有时候需求又必须是用 Spring 容器才能实现,所以:

ApplicationContextAware 就是用来获取框架自动初始化到IOC 容器对象的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值