Spring中对象管理的配置文件方式

**技术分析之Spring框架中<bean>标签的配置**

 

1. id属性和name属性的区别

* id                -- 为类起个名字,在约束中采用ID的约束,唯一

* 取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号        

id:不能出现特殊字符

* name                -- Bean起个名字,没有采用ID的约束,和id类似

* 取值要求:name:允许出现特殊字符.如果<bean>没有id的话 , name可以当做id使用

2. class属性                        -- Bean对象的全路径

3. scope属性                        -- scope属性代表Bean的作用范围

* singleton                        -- 单例(默认值)

* prototype                        -- 多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,配置把Action类配

置成多例!(每次请求都需要创建一个Action,因为Struts2中值栈是不能共享的)

* request                        -- 应用在Web项目中,每次HTTP请求都会创建一个新的Bean

* session                        -- 应用在Web项目中,同一个HTTP Session 共享一个Bean

* globalsession                -- 应用在Web项目中,多服务器间的session

 

4. Bean对象的创建和销毁的两个属性配置(了解)

* 说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法

* init-method                -- 当bean被载入到容器的时候调用init-method属性指定的方法(指定bean创建时调用的方法)

* destroy-method        -- 当bean从容器中删除的时候调用destroy-method属性指定的方法(指定bean销毁时调用的方法)

想查看destroy-method的效果,有如下条件:

* scope= singleton有效

* web容器中会自动调用,但是main函数或测试用例需要手动调用(需要使用ClassPathXmlApplicationContext的close()方法)

 

**技术分析之依赖注入(DI)**

 

1. IOC和DI的概念

* IOC                -- Inverse of Control,控制反转,将对象的创建权反转给Spring!

* DI                -- Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!

2.  DI(依赖注入)

* 例如:如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的IOC功能时,可以通过依赖注入把该属性的值传入进来!

* 具体的配置如下

<bean id="us" class="com.itheima.demo1.UserServiceImpl">

<!--name:属性名

      value:属性值

-->

<property name="uname" value="小风"/>

</bean>

 

**技术分析之Spring框架的属性注入**

 

1. 对于类成员变量,常用的注入方式有两种

* 构造函数注入

* 属性setter方法注入

 

2. 在Spring框架中提供了前两种的属性注入的方式

1. 构造方法的注入方式,两步

* 编写Java的类,提供构造方法

public class Car {

private String name;

private double money;

public Car(String name, double money) {

this.name = name;

this.money = money;

}

@Override

public String toString() {

return "Car [name=" + name + ", money=" + money + "]";

}

}

 

* 编写配置文件

<bean id="car" class="com.itheima.demo4.Car">

<constructor-arg name="name" value="大奔"/>

<constructor-arg name="money" value="100"/>

</bean>

 

2. 属性的setter方法的注入方式

* 编写Java的类,提供属性和对应的set方法即可

* 编写配置文件

<bean id="car" class="com.itheima.demo4.Car">

<property name="name" value="大奔"/>

<property name="money" value="100"/>

</bean>

 

3. 如果Java类的属性是另一个Java的类,那么需要怎么来注入值呢?

* <property name="name" rel="具体的Bean的ID或者name的值"/>

* 例如:

<bean id="person" class="com.itheima.demo4.Person">

<property name="pname" value="美美"/>

<property name="car2" ref="car2"/>

</bean>

 

**技术分析之Spring的2.5版本中提供了一种:p名称空间的注入(了解)**

1. 步骤一:需要先引入 p 名称空间

* 在schema的名称空间中加入该行:xmlns:p="http://www.springframework.org/schema/p"

 

2. 步骤二:使用p名称空间的语法

* p:属性名 = ""

* p:属性名-ref = ""

 

3. 步骤三:测试

* <bean id="person" class="com.itheima.demo4.Person" p:pname="老王" p:car2-ref="car2"/>

 

----------

 

**技术分析之Spring的3.0提供了一种:SpEL注入方式(了解)**

 

1. SpEL:Spring Expression Language是Spring的表达式语言,有一些自己的语法

2. 语法

* #{SpEL}

3. 例如如下的代码

<!-- SpEL的方式 -->

<bean id="person" class="com.itheima.demo4.Person">

<property name="pname" value="#{'小风'}"/>

<property name="car2" value="#{car2}"/>

</bean>

 

**技术分析之数组,集合(List,Set,Map),Properties等的注入**

1. 如果是数组或者List集合,注入配置文件的方式是一样的

<bean id="collectionBean" class="com.itheima.demo5.CollectionBean">

<property name="arrs">

<list>

<value>美美</value>

<value>小风</value>

</list>

</property>

</bean>

 

2. 如果是Set集合,注入的配置文件方式如下:

<property name="sets">

<set>

<value>哈哈</value>

<value>呵呵</value>

</set>

</property>

 

3. 如果是Map集合,注入的配置方式如下:

<property name="map">

<map>

<entry key="老王2" value="38"/>

<entry key="凤姐" value="38"/>

<entry key="如花" value="29"/>

</map>

</property>

 

4. 如果是properties属性文件的方式,注入的配置如下:

<property name="pro">

<props>

<prop key="uname">root</prop>

<prop key="pass">123</prop>

</props>

</property>

 

----------

 

**技术分析之Spring框架的配置文件分开管理(了解)**

 

1. 例如:在src的目录下又多创建了一个配置文件,现在是两个核心的配置文件,那么加载这两个配置文件的方式有两种!

* 主配置文件中包含其他的配置文件:

<import resource="applicationContext2.xml"/>

 

* 工厂创建的时候直接加载多个配置文件:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

"applicationContext.xml","applicationContext2.xml");

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值