spring learning day 2

1.什么时pojo编程,ejb编程带来了哪些问题?

pojo即简单java对象,就是javabean,ejb2.x规定所有组件接口和业务逻辑实现类都必须ejb框架包中拓展接口,造成紧耦合。pojo的优点:编写应用程序类非常简单和快速,不用实现特定的api和接口。

2.容器:所有组件都被创建和组装,并且提供中间件服务。spring application framework就是著名的轻量级容器。

3.setter注入:当一个对象被容器实例化后会立即初始化,该注入在组件的创建和初始化阶段发生,并且在处理业务方法之前完成。

4.org.springframework.context.annotation.Configuration该注解告诉spring此类是一个bean,并且包含配置元数据。org.springframework.context.annotation.Bean修饰的工厂方法在启动期间被spring调用,并返回一个bean。如果多个bean工厂方法调用bean中的另一个方法那么不会产生多个bean实例。

5.java注解:Service:仅将一个类声明为bean。Repository:声明为一个bean,并且能够启动与spring数据访问相关联的其他功能。Autowired:如果spring容器中能够满足某个一依赖项,就应该将该依赖项注入到autowire声明的属性setter方法中。

6.构造函数注入:spring容器首先查看元素<constructor-arg ref="x">中的依赖项x,并找到依赖项x,尝试使用java反射机制调用相应的构造函数,找到构造函数之后,将x作为输入参数,调用构造函数注入依赖,生成bean。

7.循环依赖:这是使用构造函数无法解决的,因为当创建第一个bean时,他会等待第二个bean注入到其中,但是此时第二个bean也和第一个bean是同样的情况,也等到第一个依赖注入其中,这就造成了构造函数注入无法解决循环依赖的问题,但是一般不提倡循环依赖,因为对于循环依赖的bean而言其他许多spring功能也无法使用。

8.spring容器在启动时第一步处理配置元数据,建立元数据中存在的bean定义,还会对bean的定义进行验证比如<property><constructor-arg>等是否指向正确的bean,第二阶段完成bean的创建,然后进行依赖的注入。在创建bean时并非所有的定义的bean都会创建,只会创建无状态作用于的bean。

9.bean重写定义:发生在两个阶段:第一个阶段发生在bean配置元数据文件级别-applicationcontext接受了多个bean配置元数据文件,其中两个元数据配置文件会创建两个相同的bean,那么在后边元数据配置文件中定义的bean会重写前边元数据配置文件的bean。第二个阶段:发生在容器级别,在父applicationcont和子applicationcontext中存在两个相同名的bean,spring会采用子applicationcontext中的bean。

10.depends-on:属性:有时候beanA必须在beanB之后才能创建,那么就可以使用depends-on="b".这样会在创建beanB之后才会创建beanA。

70

11.自动装配:可以不用显示的再配置文件中显示定义依赖,spring可以实现自动装配依赖,有三种装配方式:第一种bytype装配,通过java反射机制查看bean类中的属性类型,并再容器中寻找相同的类型,通过调用setter方法进行注入。如果多个bean实例适合装配到一个属性中,那么自动装配会失败。第二种方式:byname,将属性名的bean名称进行匹配,若匹配则注入。第三种方式:constructor:通过bean的类型和构造函数参数类型匹配进行注入。

12.对spring容器种的bean进行查找:首先获取applicationcontext的引用,然后再调用这个引用的getBean方法查找bean。在独立的spring应用程序中,开发者应该将applicationcontext的引用保存到一个全局可访问的静态变量中去。在spring web应用中,提供了工具类org.springframework.web.context.support.WebApplicationContextUtils,该类中的方法可以返回applicationcontext引用。

13.@autowired:在字段或者setter方法上表明此修饰符,就可以将spring 容器自身注入到bean实例。

14.bean名称:在xml配置中可以通过id给bean定义名称,通过若无id,可通过name给bean定义多个名字,第一个是名字,其他的为别名。在java配置中可以使用@Bean(name={"name1,name2"})给bean定义多个name,再注解中可以使用@Service("name1")给bean定义名称。如果再java配置和注解配置中都没有给定bean名称那么采用类名或者方法名作为bean的名称。

15.bean的作用域和生命周期:作用域分别有五个:singleton、prototype、request、session、globalSession.singleton是spring容器默认的创建bean的作用域选择,即单例创建,只创建一个bean对象。prototype:当需要一个新的bean时,创建一个新的bean如同new关键字。request:每一次请求都会创建一个新的bean。session:每一次会话创建一个bean。

16.bean延迟初始化:在某些场景下并非所有的bean都会用到,有些bean的初始化会暂用大量的时间,所以就有了延迟初始化,在真正需要使用bean的时候才进行初始化,比如将一个bean注入到另一个bean中去。如果想把所有的bean都定义为延迟初始化,则在配置文件xml中beans中写:default-lazy-init="true",对于单个bean是否采用延迟初始化可以在bean定义中输入:lazy-init="false".

17.声明周期回调:在bean对象被创建或则被销毁时调用相应的方法,此处就基于xml配置文件来说:可以在编写bean时<bean  init-method="方法名"/>,其中方法实在该bean中定义的,这里再bean初始化完成后将会调用这个方法,这个方法要求不具有返回值,不具有参数列表,可以抛出异常。<bean   destory-method="方法名"/>这个方法在bean销毁之前调用。不同的bean的作用域不同,销毁的时间段也不同,对于prototype作用域,spring容器只负责创建该作用域的对象,不负责跟踪,所以destory-method无效。

转载于:https://my.oschina.net/u/3870314/blog/1843089

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值