Spring基础知识(三)

21.什么是Spring Beans?
Spring Beans是构成Spring应用核心的Java对象。这些对象由Spring IOC容器实例化、组装、管理。
这些对象通过容器中配置的元数据创建,例如,使用XML文件中定义的创建。
在Spring中创建的beans都是单例的beans。在bean标签中有一个属性为”singleton”,如果设为true,该bean是单例的,如果设为false,该bean是原型bean。
Singleton属性默认设置为true。因此,spring框架中所有的bean都默认为单例bean。


22.Spring Bean中定义了什么内容?
Spring Bean中定义了所有的配置元数据,这些配置信息告知容器如何创建它,它的生命周期是什么以及它的依赖关系。


23.如何向Spring 容器提供配置元数据?
有三种方式向Spring 容器提供元数据:
1.XML配置文件
2.基于注解配置
3.基于Java的配置


24.你如何定义bean的作用域?
在Spring中创建一个bean的时候,我们可以声明它的作用域。只需要在bean定义的时候通过’scope’属性定义即可。
例如,当Spring需要产生每次一个新的bean实例时,应该声明bean的scope属性为prototype。
如果每次你希望Spring返回一个实例,应该声明bean的scope属性为singleton。


25.说一下Spring中支持的bean作用域
Spring框架支持如下五种不同的作用域:
singleton:在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在。
prototype:一个bean可以定义多个实例。
request:每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境。
session:一个HTTP Session定义一个Bean。该作用域仅适用于WebApplicationContext环境.
globalSession:同一个全局HTTP Session定义一个Bean。该作用域同样仅适用于WebApplicationContext环境.
bean默认的scope属性是’singleton‘。


26.Spring框架单例beans线程安全吗?
不是,Spring框架中的单例beans不是线程安全的。


27.解释Spring框架中bean的生命周期
Spring容器读取XML文件中bean的定义并实例化bean。
Spring根据bean的定义设置属性值。
如果该Bean实现了BeanNameAware接口,Spring将bean的id传递给setBeanName()方法。
如果该Bean实现了BeanFactoryAware接口,Spring将beanfactory传递给setBeanFactory()方法。
如果任何bean BeanPostProcessors 和该bean相关,Spring调用postProcessBeforeInitialization()方法。
如果该Bean实现了InitializingBean接口,调用Bean中的afterPropertiesSet方法。如果bean有初始化函数声明,调用相应的初始化方法。
如果任何bean BeanPostProcessors 和该bean相关,调用postProcessAfterInitialization()方法。
如果该bean实现了DisposableBean,调用destroy()方法。


28.哪些是最重要的bean生命周期方法?
有两个重要的bean生命周期方法。第一个是setup方法,该方法在容器加载bean的时候被调用。
第二个是teardown方法,该方法在bean从容器中移除的时候调用。
bean标签有两个重要的属性(init-method 和 destroy-method),你可以通过这两个属性定义自己的初始化方法和析构方法。
Spring也有相应的注解:@PostConstruct 和 @PreDestroy。


29.什么是Spring的内部bean?
当一个bean被用作另一个bean的属性时,这个bean可以被声明为内部bean。在基于XML的配置元数据中,可以通过把元素定义在 或元素内部实现定义内部bean。
内部bean总是匿名的并且它们的scope总是prototype。


30.如何在Spring中注入Java集合类?
Spring提供如下几种类型的集合配置元素:
list元素用来注入一系列的值,允许有相同的值。
set元素用来注入一些列的值,不允许有相同的值。
map用来注入一组”键-值”对,键、值可以是任何类型的。
props也可以用来注入一组”键-值”对,这里的键、值都字符串类型。


31.什么是bean wiring?
Wiring,或者说bean Wiring是指beans在Spring容器中结合在一起的情况。
当装配bean的时候,Spring容器需要知道需要哪些beans以及如何使用依赖注入将它们结合起来。


32.什么是bean自动装配?
Spring容器可以自动配置相互协作beans之间的关联关系。这意味着Spring可以自动配置一个bean和其他协作bean之间的关系,
通过检查BeanFactory 的内容里没有使用和< property>元素。


33.解释自动装配的各种模式?
自动装配提供五种不同的模式供Spring容器用来自动装配beans之间的依赖注入:
no:默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean。
byName:通过参数名自动装配,Spring容器查找beans的属性,这些beans在XML配置文件中被设置为byName。之后容器试图匹配、装配和该bean的属性具有相同名字的bean。
byType:通过参数的数据类型自动自动装配,Spring容器查找beans的属性,这些beans在XML配置文件中被设置为byType。之后容器试图匹配和装配和该bean的属性类型一样的bean。如果有多个bean符合条件,则抛出错误。
constructor:这个同byType类似,不过是应用于构造函数的参数。如果在BeanFactory中不是恰好有一个bean与构造函数参数相同类型,则抛出一个严重的错误。
autodetect:如果有默认的构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配。


34.自动装配有哪些局限性?
自动装配有如下局限性:
重写:你仍然需要使用 和< property>设置指明依赖,这意味着总要重写自动装配。
原生数据类型:你不能自动装配简单的属性,如原生类型、字符串和类。
模糊特性:自动装配总是没有自定义装配精确,因此,如果可能尽量使用自定义装配。


35.可以在Spring中注入null或空字符串吗
完全可以。
Spring注解


36.什么是Spring基于Java的配置?
基于Java的配置允许你使用Java的注解进行Spring的大部分配置而非通过传统的XML文件配置。
以注解@Configuration为例,它用来标记类,说明作为beans的定义,可以被Spring IOC容器使用。
另一个例子是@Bean注解,它表示该方法定义的Bean要被注册进Spring应用上下文中。


37.什么是基于注解的容器配置?
另外一种替代XML配置的方式为基于注解的配置,这种方式通过字节元数据装配组件而非使用尖括号声明。
开发人员将直接在类中进行配置,通过注解标记相关的类、方法或字段声明,而不再使用XML描述bean之间的连线关系。


38.如何开启注解装配?
注解装配默认情况下在Spring容器中是不开启的。如果想要开启基于注解的装配只需在Spring配置文件中配置元素即可。


39.@Required 注解
@Required表明bean的属性必须在配置时设置,可以在bean的定义中明确指定也可通过自动装配设置。
如果bean的属性未设置,则抛出BeanInitializationException异常。


40.@Autowired 注解
@Autowired 注解提供更加精细的控制,包括自动装配在何处完成以及如何完成。
它可以像@Required一样自动装配setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。


41. @Qualifier 注解
当有多个相同类型的bean而只有其中的一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用消除这种混淆,指明需要装配的bean。
Spring数据访问


42.Spring框架中如何有效的使用JDBC
使用Spring JDBC框架,资源管理以及错误处理的代价都会减轻。开发人员只需通过statements和queries语句从数据库中存取数据。
Spring框架中通过使用模板类能更有效的使用JDBC,也就是所谓的JdbcTemplate(例子)。


43.JdbcTemplate
JdbcTemplate类提供了许多方法,为我们与数据库的交互提供了便利。例如,它可以将数据库的数据转化为原生类型或对象,
执行写好的或可调用的数据库操作语句,提供自定义的数据库错误处理功能。


44.Spring对DAO的支持
Spring对数据访问对象(DAO)的支持旨在使它可以与数据访问技术(如 JDBC, Hibernate 及JDO)方便的结合起来工作。
这使得我们可以很容易在的不同的持久层技术间切换,编码时也无需担心会抛出特定技术的异常。


45.通过什么方式访问Hibernate?
使用Spring有两种方式访问Hibernate:
使用Hibernate Template的反转控制以及回调方法
继承HibernateDAOSupport,并申请一个AOP拦截器节点
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值