Spring以IoC、AOP为主要思想,其中IoC,Inversion of Control 指控制反转或反向控制。在Spring框架中我们通过配置创建类对象,由Spring在运行阶段实例化、组装对象。AOP,Aspect Oriented Programming,面向切面编程,其思想是在执行某些代码前执行另外的代码,使程序更灵活、扩展性更好,可以随便地添加、删除某些功能。Servlet中的Filter便是一种AOP思想的实现。
Bean标签的常用属性
(1)id属性:用于指定配置对象的名称,不能包含特殊符号。
(2)class属性:创建对象所在类的全路径。
(3)name属性:功能同id属性一致。但是在name属性值中可以包含特殊符号。
(4)scope属性
singleton:默认值,单例
单例模式下,在程序下只有一个实例。非单态模式下,每次请求该Bean,都会生成一个新的对象。
prototype:多例
request:创建对象后将对象存放到request域
session:创建对象后将对象存放到session域
globalSession:创建对象后将对象存放到globalSession域
init-method="init" 始化调用了init方法
destroy-method="destroy" 销毁时调用了init方法
spring Bean的作用域:scope="singleton"(默认,单例,生成一个实例)
单例模式,默认在程序初始化的时候实例化(lazy-init=”false”)
spring Bean的作用域:scope="prototype"(多线程, 生成多个实例)
prototype:getBean的时候才是实例化
lazy-init 只对单例模式起作用,对prototype不起作用(因为prototype默认就不是程序初始化的时候实例化的)
<bean id="gardenerClient" class="com.minipay.gamesdk.standalone.service.GardenerClientService" init-method="init" scope="singleton">
<property name="mainBusinessId" value="3"/>
<property name="gardenerConfigService" ref="gardenerConfigService"></property>
</bean>
------------------------------------------------------------------------------
name是指GardenerClientService类中的参数,也既GardenerClientService类中有一个属性名叫mainBusinessId的属性,而value是为这个属性名为mainBusinessId的指定值,把它当作参数传进GardenerClientService中
name是指GardenerClientService类中的参数,也既GardenerClientService类中有一个GardenerConfigService类型名叫gardenerConfigService的对象,而ref是当前xml文件中叫做gardenerConfigService的这个bean,把它当作参数传进GardenerConfigService中
--------------------------------------------------------------------------
ref属性:查找当前配置文件里的bean
ref标签有3种属性
<ref bean=""/> :查找全局中的bean。即可以查找其他xml配置文件的bean,优先从当前配置文件寻找
<ref local=""/> :查找当前配置文件中bean,等同于ref属性。local属性值必须同目标bean的id属性值相同
<ref parent=""/>:指定其依赖的父JavaBean定义