一、什么是Spring bean?Spring bean与Java bean有什么区别?
在 Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。
简单的来说就是:
1. bean是对象,一个或者多个不限定
2. bean由Spring中的IoC管理
区别:JavaBean是由自己实例化出来的,而bean的对象是由Spring的IOC容器创建出来的!
二、配置bean有几种方法?(4种)
(1)xml配置文件: <bean class="com.tuling.UserService" id="">
(2)注解:@Component(@Controller 、@Service、@Repostory)
但是有一个前提:需要配置扫描包<component-scan>
(3)javaConfig: @Bean 可以自己控制实例化过程
使用@Bean与使用@Component有什么区别???
- @Component是Spring通过反射调用构造方法;
- @Bean是标注在方法上面,通常是与@Configuration配置类的注解一起使用,@Bean标注的方法必须有返回值,值为一个对象,该对象就是一个bean!
(4)@Import 3种方式
三、解释Spring支持的几种bean的作用域
Spring框架支持以下五种bean的作用域:
我们可以通过@Scope()注解 和 xml中的scope属性进行配置
singleton : bean在每个Spring ioc 容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
application:全局 Web 应用程序范围的范围标识符。一个全局的应用共享一个对象
注意:
Spring bean 的作用域默认是Singleton。
使用 prototype 作用域需要慎重的思考,因为频繁创建和销毁 bean 会带来很大的性能开销
四、单例bean的优势(单例设计模式的优势)
Spring的默认作用域就是(singleton)单例。
由于不会每次都新创建新对象所以有一下几个性能上的优势:
(1)减少了新生成实例的消耗,新生成实例消耗包括两方面,第一,spring会通过反射来生成bean实例这都是耗性能的操作,其次给对象分配内存也会涉及复杂算法。
单例bean提高了服务器内存的利用率 ,减少服务器内存消耗。
(2)减少jvm垃圾回收,由于不会给每个请求都新生成bean实例,所以自然回收的对象少了。
(3)可以快速获取到bean,因为单例的获取bean操作除了第一次生成之外,其余的都是从缓存里获取的所以很快。
五、Spring实例化bean方式的几种方式 (wait......)
1. 构造器方式(反射);
2. 静态工厂方式; factory-method
3. 实例工厂方式(@Bean); factory-bean+factory-method
4. FactoryBean方式