spring面试题之——Bean

什么是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的协作者。

自动装配的不同模式:

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-autowire

自动装配的局限性

自动装配并不那么精确。理由如上,因此建议使用明确的装配方式而非自动装配。

 

文章来自各大论坛和平台,并非本人原创,但是无奈找不到一个具体来源,故类别上写为原创。侵删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值