Spring学习(2)-在IoC容器中装配Bean(2)
Spring学习(二)---在IoC容器中装配Bean(2)
##四 注入参数详解
###1.字面值
XML中共有5个特殊字符,分别是:&<>“‘。如果配置文件中的注入值包括这些特殊字符,就需要进行特殊处理。有两种解决办法:其一,采用<![CDTA[]]>特殊标签,将包含特殊字符的字符串封装起来;其二,使用XML庄毅序列表示这些特殊的字符。
###2.引用其他Bean
```XML
<bean id ="car" class="com.baobaobao.attr.Car"/>
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="car">
<!-- 引用上面定义的car Bean-->
<ref bean="car"></ref>
</property>
</bean>
```
<ref> 元素可以通过以下三个属性引用容器中其他Bean
- bean :通过该属性可以引用同一容器或父容器的Bean,
- local:通过该属性只能引用同一配置文件中定义的Bean
- parent:引用父容器中的Bean
###3.内部Bean
如果car Bean纸杯boss Bean引用而不会被容器中任何其他的Bean引用,则可以将car以内部Bean的方式注入到Boss中:
```XML
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="car">
<bean class="com.baobaobao.attr.Car">
<property name="maxSpeed" value="200"/>
<property name="price" value="200000.00"/>
</bean>
</property>
</bean>
```
###4.null值
`<property name="brand"><null/></property>`
###5.级联属性
```XML
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="car.price" value="200000.00"/>
</bean>
```
按照上面的配置,Spring将调用Boss.getCar().setPrice("200000.00")方法进行属性的注入操作。此时,需要在Boss类中,对Car进行初始化。
###6.集合类型属性
####list
```XML
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>
```
####set
```XMl
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
</property>
</bean>
```
####map
```XMl
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<map>
<entry>
<key><value>Am</value></key>
<value>会见客户</value>
</entry>
</map>
</property>
</bean>
```
####Properties
```XMl
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<props>
<prop key="jobMail">sss@qq.com</prop>
</props>
</property>
</bean>
```
还有几个类型用法和上面基本差不多,不一一列出
##五 方法注入
方法注入是用来解决prototype类型的Bean的注入。
###1.lookup方法注入
通过lookup-method元素标签为MagicBoss的getCar()提供动态实现,返回prototype的carBean,这样Spring将在运行期为MagicBoss接口提供动态实现。
六 <bean>之间的关系
1.继承
父<bean>的主要功能是为了简化子<bean0>的配置,所以一般声明为abstract="true",表示这个<bean>不实例化为一个对应的Bean。如果用户没有指定abstract="true"则Spring IoC容器会实例化一个名为abstractCar 的Bean。
2.依赖 主要用到两个标签:1.<ref> 2.<depends=on>
3.引用
七 Bean作用域
八 基于注解的配置
1.使用注解定义Bean
现在基本上用@Repository:用于对DAO实现类进行标注;@Service:用于对Service实现类进行标注;@Controller:用于对Controller实现类进行标注。但也可以用@Component进行标注
2.使用配置信息启动Spring容器
##四 注入参数详解
###1.字面值
XML中共有5个特殊字符,分别是:&<>“‘。如果配置文件中的注入值包括这些特殊字符,就需要进行特殊处理。有两种解决办法:其一,采用<![CDTA[]]>特殊标签,将包含特殊字符的字符串封装起来;其二,使用XML庄毅序列表示这些特殊的字符。
###2.引用其他Bean
```XML
<bean id ="car" class="com.baobaobao.attr.Car"/>
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="car">
<!-- 引用上面定义的car Bean-->
<ref bean="car"></ref>
</property>
</bean>
```
<ref> 元素可以通过以下三个属性引用容器中其他Bean
- bean :通过该属性可以引用同一容器或父容器的Bean,
- local:通过该属性只能引用同一配置文件中定义的Bean
- parent:引用父容器中的Bean
###3.内部Bean
如果car Bean纸杯boss Bean引用而不会被容器中任何其他的Bean引用,则可以将car以内部Bean的方式注入到Boss中:
```XML
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="car">
<bean class="com.baobaobao.attr.Car">
<property name="maxSpeed" value="200"/>
<property name="price" value="200000.00"/>
</bean>
</property>
</bean>
```
###4.null值
`<property name="brand"><null/></property>`
###5.级联属性
```XML
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="car.price" value="200000.00"/>
</bean>
```
按照上面的配置,Spring将调用Boss.getCar().setPrice("200000.00")方法进行属性的注入操作。此时,需要在Boss类中,对Car进行初始化。
###6.集合类型属性
####list
```XML
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>
```
####set
```XMl
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
</property>
</bean>
```
####map
```XMl
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<map>
<entry>
<key><value>Am</value></key>
<value>会见客户</value>
</entry>
</map>
</property>
</bean>
```
####Properties
```XMl
<bean id="boss" class="com.baobaobao.attr.Boss">
<property name="favorites">
<props>
<prop key="jobMail">sss@qq.com</prop>
</props>
</property>
</bean>
```
还有几个类型用法和上面基本差不多,不一一列出
##五 方法注入
方法注入是用来解决prototype类型的Bean的注入。
###1.lookup方法注入
<bean id="car" class="com.baobaobao.injectfun.Car" p:brand="红旗" p:price="20000" scope="prototype"/> //实施方法注入 <bean id="magicBoss" class="com.baobaobao.injectfun.MagicBoss"> <lookup-method name="getCar" bean="car"/> </bean>
通过lookup-method元素标签为MagicBoss的getCar()提供动态实现,返回prototype的carBean,这样Spring将在运行期为MagicBoss接口提供动态实现。
六 <bean>之间的关系
1.继承
//定义抽象bean <bean id="abstractCar" class="com.baobaobao.Car" p:brand="红旗" p:price="20000" p:color="黑色" abstract="true"/> //继承与abstract <bean id="car" p:color="红色" parent="abstractCar">
父<bean>的主要功能是为了简化子<bean0>的配置,所以一般声明为abstract="true",表示这个<bean>不实例化为一个对应的Bean。如果用户没有指定abstract="true"则Spring IoC容器会实例化一个名为abstractCar 的Bean。
2.依赖 主要用到两个标签:1.<ref> 2.<depends=on>
3.引用
七 Bean作用域
类别 | 说明 |
singleton | 在Spring IoC容器中仅存在一个Bean实例,Bean以单实例的方式存在 |
prototype | 每次从容器中调用Bean时,都会返回一个新的实例,即每次调用getBean()时,相当于执行new XXXBean()的操作 |
request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境 |
session | 同一个HTTP Session共享一个Bean,不同HTTP Session使用不同的Bean。该作用域仅适用于WebApplicationContext环境 |
globalSession | 同一个全局Session共享一个Bean,一般用于Protlet应用环境。该作用域仅适用于WebApplicationContext环境 |
八 基于注解的配置
1.使用注解定义Bean
现在基本上用@Repository:用于对DAO实现类进行标注;@Service:用于对Service实现类进行标注;@Controller:用于对Controller实现类进行标注。但也可以用@Component进行标注
2.使用配置信息启动Spring容器
//扫描类包以应用注解定义的Bean 先声明context命名空间 <context:component-scan base-package="com.baobaobao.anno"/> //过滤 //1.扫描特定的包 <context:component-scan base-package="com.baobaobao" resource-pattern="anno/*.class"/> //2. <context:component-scan base-package="com.baobaobao.anno"> <context:include-filter type="regex" expression="com\.baobaobao\.anno."/> <context:exclude-filter typr="aspectj" expression="com.baobaobao..*COntroller+"/> </context>