1,关于spring容器:
Spring的核心是spring容器,该容器负责管理spring中的java组件。
ApplicaTIonContext ctx = new ClassPathXmlApplicaTIonContext("xxx.xml");//实例化容器,容器会自动预初始化所有Bean实例。ApplicaTIonContext 实例正是Spring容器。
ctx.getBean("beanName");//获取bean
ApplicaTIonContext容器默认会实例化所有的singleton Bean
Spring容器并不强制要求被管理组件是标准的javabean。
2,Spring的核心机制:依赖注入。
不管是依赖注入(Dependency Injection)还是控制反转(Inversion of Conctrol),其含义完全相同:
当某个java实例(调用者)需要调用另一个java实例(被调用者)时,传统情况下,通过调用者来创建被调用者的实例,通常通过new来创建,
而在依赖注入的模式下创建被调用者的工作不再由调用者来完成,因此称之为“控制反转”;创建被调用者实例的工作通常由Spring来完成,然后注入调用者,所以也称之为“依赖注入”。
3,依赖注入的方式:
依赖注入一般常用两种:
setter注入:IoC容器使用属性的setter方式注入被依赖的实例。
<property name="" ref ="">
构造注入:IoC容器使用构造器来注入被依赖的实例。
<constructor-arg index="0" ref = "">
配置构造注入的时候《constructor-arg》可以配置index属性,用于指定该构造参数值作为第几个构造参数值。下标从0开始。
4,Spring容器和被管理的bean:
Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可以代表Spring容器。
Spring容器是生成Bean实例的工厂,并管理Spring中的bean,bean是Spring中的基本单位,在基于Spring的java EE工程,所有的组件都被当成bean处理。
Spring容器类图Spring容器:Spring最基本的接口就是BeanFactory,BeanFactory有很多实现类,通常使用XmlBeanFactory,对于绝大多数的JAVA EE项目,使用ApplicationContext。
ApplicationContext事件机制是基于观察者设计模式实现的。通过ApplicationEvent类和ApplicationListener接口,其中ApplicationEvent:容器事件,必须由ApplicationContext发布;ApplicationListener:监听器,可有容器内的任何监听器Bean担任。
容器中bean的作用域:
singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的bean将只有一个实例;
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新实例;
request:对于每次HTTP请求中,使用request定义的bean都将产生一个新实例,只有在web应用程序使用Spring时,该作用域才有效;
session:同理
global session:同理
注意:request和session作用域只在web应用中才生效,并且必须在web应用中增加额外的配置才会生效,为了让request,session两个作用域生效,必须将HTTP请求对象绑定到为该请求提供服务的线程上,这使得具有request和session作用域的Bean实例能够在后面的调用链中被访问。
获取容器的引用:
通常情况下:Bean无需访问Spring容器,而是通过Spring容器访问的,即使 需要手动访问Spring容器,程序也已通过类似下面的代码获取Spring容器 的引用。
ApllicationContext cts = ClassPathApplalicationContext(“bean.xml”);
但在一些极端的情况下,可能Bean需要访问Spring容器。Spring提供另一种方法访问Spring容器:实现BeanFactoryAware接口的Bean,拥有访问Spring容器的能力,实现BeanFactoryAware的Bean被容器实例化后,会拥有一个引用指向创建他的BeanFactory。BeanFactoryAware只有一个方法setBeanFactory(BeanFactory beanFactory)该参数指向创建他的BeanFactory。
网友评论