在spring中,如果一个bean实现了ApplicationContextAWare
,那么它就能够访问ApplicationContext
。因此它能够得到其他的豆子。例如。
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext = context;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
}
为此,我们应该将这个SpringContextUtil
放在applications.xml
中,例如。
<bean class="com.util.SpringContextUtil" />
这里的beanSpringContextUtil
不包括属性ApplicationContext
。我猜当spring bean初始化时,这个属性就被设置了。但这是怎么做到的呢?如何调用SetApplicationContext
方法?
当spring实例化bean时,它会查找一些接口,如ApplicationContextAWare
和InitializingBean
。如果找到这些方法,则调用这些方法。例如。(非常简化)
Class<?> beanClass = beanDefinition.getClass();
Object bean = beanClass.newInstance();
if (bean instanceof ApplicationContextAware) {
((ApplicationContextAware) bean).setApplicationContext(ctx);
}
请注意,在较新的版本中,使用注释可能更好,而不是实现Spring特定的接口。现在您可以简单地使用:
@Inject // or @Autowired
private ApplicationContext ctx;
问题内容: 在春季,如果实现了bean ,则它可以访问。因此,它能够获得其他豆类。例如 然后可以得到bean的“名称”。 要做到这一点,我们应该把这个里面的,如 这里的bean 不包含属性。我想当spring bean初始化时,就设置了这个属性。但是,这是怎么做的呢?该方法如何调用? 问题答案: 当spring实例化bean时,它会寻找几个接口,例如和。如果找到它们,则将调用这些方法。例如(非常简
问题内容: 我确实在项目中的三个模型对象之间有关系(文章末尾的模型和存储库片段)。 当我调用它时,会触发三个选择查询: (“ sql”) (对我而言)这是非常不正常的行为。据阅读Hibernate文档后所知,它应该始终使用JOIN查询。在类中更改为 查询时(带有附加SELECT 的查询)没有任何区别,而在类更改为 (使用JOIN查询时)则没有变化。 当我使用抑制射击时,有两个选择: 我的目标是在所
我正在尝试在Springmvc中设置OpenSessionInViewInterceptor来修复:org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话。 下面是我已经拥有的代码以及错误的来源。 AppConfig.java featured.jsp ${article.user.isSubscribed()}抛出该错误很可能是因为无法提
考虑这样一种情况:将原型范围的bean注入到单例范围的bean中, 当我们尝试使用单例范围的bean访问原型范围的bean时,每次返回的都是相同的bean,即在单例初始化时注入的bean。 如果我们希望每次使用作用域代理时获得不同的实例。 我不知道这个作用域代理是如何在stage后面工作的,以及它是如何神奇地给我们提供一个新实例的,即使bean存在于单例中。
当我使用通过实现自定义健康信息的“传统方式”时,它会按照预期工作,健康信息会被给定的细节修饰: 问题:要使解决方案工作,还需要配置和/或实现哪些功能? 我的意图不是创建自定义执行器,而是自定义现有的执行器。基于这些文档,我希望达到与实现HealthIndicator相同的结果。我的假设错了吗? Maven配置包含: Spring Boot配置包含:
问题内容: 我当时在从事我的Spring Boot应用程序项目,并注意到,有时到另一个服务器(SQL Server)上的数据库存在连接超时错误。当我尝试执行一些脚本迁移时,这种情况会特别发生,但在尝试几次后仍可以正常工作。 然后我注意到我没有在属性文件中指定 。我做了一些研究,发现建议增加 开发。并将其更改为:生产中。 但是我实际上并不了解它实际上是如何工作的,以及hibernate如何使用或值生