第4.37课 上课 配置依赖关系, 管理Bean, Bean的作用域, 框架的核…

4_37

配置依赖关系

配置依赖关系的本质:通过<property>元素调用setter方法,或通过<constructor-arg>元素调用有参数的构造器.

无论是调用setter方法,还是调用构造器,都需要传入参数,参数类型有如下几种:

标量类型,用value属性或value子元素传入值.

引用类型

a.用ref属性或ref子元素.

b.嵌套Bean传入值.

c.自动装配.

 

List、Set、Map等集合以及数组.

 

 

 

依赖注入配置方式: 无论你是设值注入,还是构造器注入,都需要传入参数值.根据不同的参数值类型,可以采用不同的配置方式:

- 参数值类型为标量类型:用value元素或属性,p:setter方法去掉set=值

- 参数值类型为复合类型:

a. 用ref元素或属性,p:setter方法去掉set-ref=容器中已有的Bean

b. 嵌套Bean.

c. 自动装配.

- 参数值类型为List、Set、Map、Properties等集合.

 标量类型

<!-- 配置Bean:

id : Bean的唯一标识符

class : 指定类(包名 + 类名)

p:salary : 为标量类型setter方法设置值

-->

<bean id="userService" class="com.yayadou.spring.UserService"

p:salary="5900.89">

<!-- setter方法为标量类型 -->

<property name="name">

<value>admin</value>

</property>

<!-- setter方法为标量类型 -->

<property name="age" value="20"/>

</bean>

  用value属性或value子元素传入值

参数值类型为标量类型:用value元素或属性,p:set方法名去掉前面的set=值.

  引用p短名命名空间

引用p短名命名空间,简化setter方法参数的传入。

   xmlns:p="http://www.springframework.org/schema/p"

 List、Set、Map、数组、Properties等

 引用类型

  用ref属性或ref子元素

用ref元素或属性: p:setter方法去掉set-ref=容器中已有的Bean.

 

<!-- setter方法为引用类型 (第一种方式)

ref : 引用容器中已有的bean -->

<property name="userService" ref="dao"/>

 

 

<!-- setter方法为引用类型 (第二种方式)

ref : 引用容器中已有的bean -->

<property name="userService">

<ref bean="dao"/>

</property>

 

  嵌套Bean传入值

<!-- setter方法为引用类型 (第三种方式)

bean: 嵌套Bean传入值 -->

<property name="userService">

<bean class="com.yayadou.spring.UserService" p:name="admin" p:age="30" p:salary="8900.78"/>

</property>

 

  自动装配

自动装配:指定容器中的两个Bean,不需要程序显式使用ref配置它们的依赖关系,

直接让容器根据某种规则执行注入即可.

 

自动装配使用autowire属性进行设置,该属性支持如下属性值:

- no|default: 不使用自动装配,Bean依赖必须通过ref元素定义。这是默认的配置。

- byName: 根据setter方法名来自动装配。BeanFactory查找容器中全部Bean,

找出其中id属性与setter方法名去掉set前缀后同名的Bean来完成注入.

如果没有找到匹配的Bean实例,则Spring不会进行任何注入.

 

- byType: 根据setter方法形参类型来自动装配.

BeanFactory查找容器中全部Bean,如果正好有一个Bean类型与setter形参类型匹配,

就自动注入这个Bean,如果有多个这样的Bean,就抛出一个异常,

如果没有匹配的Bean,则Spring不会进行任何注入.

- constructor: 与byType类似,区别是用于构造注入的参数.

如果BeanFactory中不是恰好有一个Bean与构造器参数类型相同,则会抛出一个异常.

 

autowire-candidate="false|true",用于指定该Bean是否可作为自动装配的候选者.

 

 

 

 

<!-- 配置Bean:

id : Bean的唯一标识符

class : 指定类(包名 + 类名)

p:salary : 为标量类型setter方法设置值

autowire-candidate="false|true"用于指定该Bean是否可作为自动装配的候选者.

-->

<bean id="userService" autowire-candidate="false" class="com.yayadou.spring.UserService"/>

 

 

<!-- 配置Bean:

id : Bean的唯一标识符

class : 指定类(包名 + 类名)

autowire : 自动装配

no: 不使用自动装配(默认的配置).

byName: 根据setter方法名来自动装配.

byType: 根据setter方法形参类型来自动装配.

constructor: 与byType类似,区别是用于构造注入的参数.

-->

<bean id="adminService" class="com.yayadou.spring.AdminService" autowire="byType"/>

   no不使用自动装配

no: 不使用自动装配,Bean依赖必须通过ref元素定义.【这是默认的配】

   byName根据setter方法名来自动装配

byName: 根据setter方法名来自动装配。BeanFactory查找容器中全部Bean,

找出其中id属性与setter方法名去掉set前缀后同名的Bean来完成注入.

如果没有找到匹配的Bean实例,则Spring不会进行任何注入.

 

   byType根据setter方法形参类型来自动装配

byType: 根据setter方法形参类型来自动装配.

BeanFactory查找容器中全部Bean,如果正好有一个Bean类型与setter形参类型匹配,

就自动注入这个Bean,如果有多个这样的Bean,就抛出一个异常,

如果没有匹配的Bean,则Spring不会进行任何注入.

 

   constructor跟byType类似

constructor: 与byType类似,区别是用于构造注入的参数.

如果BeanFactory中不是恰好有一个Bean与构造器参数类型相同,则会抛出一个异常.

管理Bean

Spring管理Bean:

 

a.Spring管理的Bean,就是最普通的Java对象.

b.开发者使用Spring框架所做的主要是两件事:①:开发Bean;②:配置Bean.

c.对于Spring框架来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的setter方法完成“依赖注入”

这就是所谓IoC的本质.

 

Spring框架的本质:根据XML配置驱动Java代码,将Java代码的耦合提升到XML配置中管理——这就是所谓的解耦.

 

Bean的作用域

Bean的作用域:

何谓作用域,通俗来说就是活多久.

 

可通过<bean.../>元素的scope来配置作用域,作用域支持如下属性:

singleton、prototype、request、session.

 

 

<!-- 配置Bean:

id : Bean的唯一标识符

class : 指定类(包名 + 类名)

scope : Bean的作用域

singleton : 单例

prototype: 不会预初始化,new一个新的实例

request:对应web应用中的request作用域

session:对应web应用中的session作用域

-->

<bean id="userService" class="com.yayadou.spring.UserService" scope="singleton"></bean>

 

 singleton单例

singleton:单例,无论何时,程序通过Spring容器中取出的总是同一个实例,Spring默认采用该模式.

1. 预初始化,容器出现,它就出现.

2. 容器死,它才死.

说明: 无论何时,程序去获取该Bean时,该Bean总是最初的那一个.

 prototype不会预初始化

prototype: 不会预初始化,每次通过Spring容器中获取实例,Spring都会new一个新的实例返回.

程序请求prototype Bean时,容器就创建一个全新的Bean返回出来。容器不再管该bean.

只要程序不再需要该Bean,容器根本不管该Bean,该Bean就会被垃圾回收.

 request对应Web应用request作用域

request:对应web应用中的request作用域,只在Web项目中有效,相当于在一次请求中是singleton.

 session对应web应用session作用域

session:对应web应用中的session作用域,只在Web项目中有效,相当于在一次会话中是singleton.

框架的核心

Spring框架的核心:

1.通过XML配置去驱动Java代码.

要求:眼中看到XML配置,心中想的是对应的Java代码.

 

Spring掌握的很熟练:所有的Java代码,只要别人给了Java代码,你就可以用Spring配置文件将它配出来.

posted on 2018-01-31 22:31  東風★破  阅读(122)  评论(0)    收藏  举报

导航