什么是spring bean?
bean是构成用户应用程序主干的对象。
bean由spring IoC容器管理。
bean由spring Ioc容器实例化,配置,装配和管理。
bean是基于用户提供给容器的配置元数据创建的。
spring提供了哪些配置方式?
1、基于XML配置
bean所需的依赖项和服务在XML格式的配置文件中指定。这些配置文件通常包含许多bean定义和特定于应用程序的配置选项。它们通常以bean标签开头。例如
<bean id="studentbean" class="org.edureka.firstSpring.StudentBean">
<property name="name" value="Edureka"></property>
</bean>
2、基于注解配置
您可以通过在相关的类,方法或字段声明上使用注解,将bean配置为组件类本身,而不是使用XML来描述bean装配。默认情况下,spring容器中未打开注解装配。因此,您需要在使用它之前在Spring配置文件中启用它。
当然了,在springboot中是默认打开的。毕竟springboot讲究的就是去XML化。
<beans>
<context:annotation-config/> <!-- bean definitions go here -->
</beans>
3、基于javaAPI配置
spring的java配置是通过使用@Bean和@Configuration来实现。
1、@Bean注解扮演与<bean/>元素相同的角色。
2、@Configuration类允许通过简单地调用一个类中的其它@Bean方法来定义bean间依赖关系。
@Configuration
public class StudentConfig {
@Bean
public StudentBean myStudent() {
return new StudentBean();
}
}
spring支持几种bean scope?
Spring容器中的bean可以分为5个范围:
(1)singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。
(2)prototype:为每一个bean请求提供一个实例。
(3)request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
(4)session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。
(5)global-session:全局作用域,global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。
————————————————
版权声明:本文为CSDN博主「java构架师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44801979/article/details/96354635
仅当用户使用支持Web的ApplicationContext时,最后三个才可用。
spring bean容器的生命周期是什么样的?
spring bean 容器的生命周期流程如下:
1、spring容器根据配置中的bean定义来实例化bean。
2、spring使用依赖注入填充所有属性,如bean中所定义的配置。
3、如果bean实现了BeanNameAware接口,则工厂通过传递bean的ID来调用setBeanName()。
4、如果bean实现BeanFactoryAware接口,工厂通过传递自身的实例来调用setBeanFactory().
5、如果存在与bean关联的任何BeanPostProcessors,则调用preProcessBeforeInitialization()方法。
6、如果为bean制定了init方法(<bean>的init-method属性),那么将调用它。
7、最后,如果存在与bean关联的任何BeanPostProcessors,则调用postProcessAfterInitialization()方法。
8、如果bean实现DisposableBean接口,当spring容器关闭时,会调用destroy()。
9、如果为bean制定了destroy方法(<bean>的destroy-method属性),那么将调用它。
什么是spring的内部bean?
只有将bean用作另一个bean的属性时,才能将bean声明为内部bean。为了定义bean,spring的基于XML的配置元数据在<property>或<constructor-arg>中提供了<bean>元素的使用。内部bean总是匿名的,它们总是作为原型。
例子:假设有一个Student类,其中引用了Person类,这里我们将只创建一个Person类实例并在Student中使用它。
public class Student {
private Person person; //Setters and Getters
}
public class Person {
private String name;
private String address; //Setters and Getters
}
<bean id="StudentBean" class="com.edureka.Student">
<property name="person"> <!--This is inner bean -->
<bean class="com.edureka.Person">
<property name="name" value="Scott"></property>
<property name="address" value="Bangalore"></property>
</bean>
</property>
</bean>
什么是spring装配
当bean在spring容器中组合在一起时,它被称为装配或者bean装配。spring容器需要知道需要什么bean以及容器应该如何使用依赖注入来将bean绑定在一起,同时装配bean。
自动装配有哪些方式?
spring容器能够自动装配bean。也就是说,可以通过检查BeanFactory的内容让Spring自动解析bean的协作者。
自动装配的不同模式:
自动装配的局限性
自动装配并不那么精确。理由如上,因此建议使用明确的装配方式而非自动装配。