背景:
最近工作中发现有个用法很有意思,如下代码:静态方法中引用Spring bean disconf的对象,这样就不用在B bean的用到disconf的地方声明然后注入这个bean了。相当于引入了第三个bean来实现解耦,这样用起来就很方便,直接调用静态方法即可。
代码:
class A { private static DisconfService disconf; public static String getXProperty() { return disconf.xMethod(); } } Class B { public void method() { A.getXProperty(); } }
如何保证disconf 这个bean不为空呢?
技术实现:
1. xml配置
class A { private static DisconfService disconf; public static String getXProperty() { return disconf.xMethod(); } // 增加set方法 public void setDisconf(DisconfService disconf) { A.disconf = disconf; } }
<bean id="xx" class="A" > <p:disconf ref=disconf /> </bean>
2. A实现InitianBean
class A implements InitialBean{ @AutoWired private DisconfService disconfBean; private static DisconfService disconf; public void afterPropertiesSet() { A.disconf=disconfBean; } public static String getXProperty() { return disconf.xMethod(); } }
相关推荐
这里,`MyStaticFactory`类需要有一个静态的`createBean`方法,Spring容器会调用这个静态方法来实例化`exampleBean`。 3. **工厂方法的优点与注意事项** - **优点:**工厂方法提供了更大的灵活性,可以返回任何...
在Spring容器初始化时,它会根据配置加载Bean的定义,并根据需要创建Bean实例。Bean的生命周期大致分为以下几个阶段:构造、初始化、正常使用、销毁。如果一个Bean被创建了两次,那么可能是在构造或初始化阶段出现了...
Spring容器中最为常见的组件是Bean,它是Spring容器管理的对象实例。 在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 ...
然后,通过调用`getBeanFactory()`方法,我们可以得到`DefaultListableBeanFactory`类型的`BeanFactory`实例,这个实例是Spring容器内部管理Bean的真正场所。 ```java ConfigurableApplicationContext ...
Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...
这里,`exampleFactory`是工厂Bean,`createInstance`是静态工厂方法,Spring会调用这个方法来创建Bean。 **实例工厂方法实例化**与静态工厂类似,但工厂方法是实例方法,需要先创建工厂Bean,然后在其上调用工厂...
接着,Spring容器会调用实现了BeanPostProcessor接口的Bean的postProcessBeforeInitialization和postProcessAfterInitialization方法,以在初始化前后进行扩展。之后,如果Bean实现了InitializingBean接口,则调用...
一旦`ApplicationContextUtil`被配置并初始化,就可以通过调用其静态方法`getBean`来获取任何注册在Spring容器中的Bean。例如,可以通过以下代码获取`VerifyBankTransRecvService`服务: ```java ...
- **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和依赖关系,提供了低级别的配置选项。 - **ApplicationContext** 是BeanFactory的扩展,增加了更多面向应用...
然而,静态方法和静态变量不参与Spring的生命周期管理,因此,尝试在静态字段或静态方法中直接使用`@Autowired`注入Bean会导致空指针异常,因为Spring容器不会初始化静态成员。 **解决方法1:使用@Component和非...
静态方法中调用Spring注入过程解析 静态方法中调用Spring注入过程解析是 Spring 框架中一个重要的知识点。本文将详细介绍静态方法中调用Spring注入过程解析的实现机制和关键技术要点。 Spring_IOC_容器 在Spring...
当Spring容器关闭时,或者如果Bean声明了`destroy-method`,则会调用销毁回调方法。这是清理资源和执行关闭操作的最佳时机。同样,`DisposableBean`接口的`destroy()`方法也可以用于此目的。 9. **Bean的销毁** ...
Spring将调用这个静态方法来获取Bean实例,然后进行后续的初始化和依赖注入。 第四种方式是使用实例工厂方法。与静态工厂方法类似,但需要一个工厂实例。`factory-bean`属性用于指定工厂Bean的ID,`factory-method`...
Spring容器会自动调用该接口的`setBeanFactory(BeanFactory beanFactory)`方法,将整个`BeanFactory`实例注入到实现了该接口的类中。这样就可以通过`BeanFactory`获取任意的Bean实例。 **示例代码:** ```java ...
3. **@PostConstruct注解**:在Java配置中,可以使用这个注解标记初始化方法,Spring容器会在Bean实例化后调用。 4. **InitializingBean接口**:如果Bean实现了此接口,那么`afterPropertiesSet()`方法会被自动调用...
总的来说,获取非Spring管理组件中的SpringBean主要有两种方式:一是通过实现`ApplicationContextAware`接口并存储ApplicationContext,二是使用注解和静态内部类来注入BeanFactory。这两种方法都是Spring框架提供的...
这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态工厂方法配置Bean是通过调用类中静态工厂方法来创建对象的方式。这种方式下,Spring并不直接实例化目标类,而是调用...
在Spring框架中,Bean是核心概念,它代表了应用程序中的对象,这些对象由Spring容器管理其生命周期和依赖关系。特殊Bean用法主要涉及Spring提供的多种高级特性,包括但不限于工厂方法、 prototype scope、AOP代理、...
Spring会调用指定的静态方法生成Bean实例。尽管这种方式可行,但由于涉及静态方法,可能导致测试和依赖注入复杂,所以使用较少。 3. 实例工厂创建: 相比静态工厂,实例工厂创建更为灵活,但同时也更复杂。在这种...
6. **生命周期回调**:最后,Spring会调用Bean的初始化方法(如果有的话),执行后处理器(BeanPostProcessor)的回调,完成Bean的初始化过程。 在这个过程中,Spring使用了`BeanDefinition`对象来存储关于Bean的...