Spring 基础

  • 一、 普通属性注入(重要)

在Spring中所谓普通属性注入,指的是像String、int、List、Set、Array(数组)、Map等类型的注入。

在Spring中只要为其提供相应的setter和getter方法,然后在配置文件中加上相应的配置即可实现。

 int类型注入

1、第一种方式

<property name="intValue" value="123"/>

2、第二种方式

<property name="intValue">
         <value>123</value>
 </property>

String类型配置

1、第一种方式

<property name="strValue"  value="Hello,World"/>

2、第二种方式

<property name="strValue">
         <value>Hello,World</value>
</property>

 List类型注入

<property name="listValue">
      <list>
          <value>list1</value>
          <value>list2</value>
     </list>
 </property>

Set类型注入

<property name="setValue">
         <set>
              <value>set1</value>
              <value>set2</value>
         </set>
</property>

数组类型注入

<property name="arrayValue">
        <list>
            <value>array1</value>
            <value>array2</value>
        </list>
</property>

Map类型注入

<property name="mapValue">
         <map>
            <entry key="k1" value="v1"/>
            <entry key="k2" value="v2"/>
         </map>
</property>

Spring中使用通配符加载配置文件

当我们在加载Spring配置文件时,可以采用通配符的形式进行加载,如下所示:

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");

上面的代码表示将所有以“applicationContext-”为前缀的配置文件全部加载。        

如果要正确使用通配符,需要注意文件名的命名问题!

补充说明:

<value>与<ref>的区别?

value:一般用于普通属性值的注入,如:int、String、List等。

ref:注入的是对另外一个bean的引用,即:当需要注入的是自定义类时,需要使用ref。

-----------------------------

要想使用Spring创建哪个对象,则要通过bean标签将这个对象配置到配置文件中

  • 二、公共属性注入(bean的继承)(掌握)

公共的部分形成类似于Java中的父类,其它子类直接继承父类就可以了。

 配置文件详解

父类bean的配置

<bean id="abstractBean" abstract="true">
         <property name="id" value="1000"/>
         <property name="name" value="zhang3"/>
</bean>

注:一旦为<bean>标签指定了abstract属性,那么就不能再为这个<bean>标签指定class属性了!

子类bean的配置

<bean id="bean3" class="com.spring.Bean3" parent="abstractBean"/>
<bean id="bean2" class="com.spring.Bean2" parent="abstractBean">
          <property name="name" value="li4"/>
          <property name="password" value="123456"/>
</bean>

说明:子类可以将从父类继承过来的属性进行重新赋值,如:<property name="name" value="li4"/> 

小结:公共属性注入

  1. 通过<bean>标签定义公共的属性,指定abstract=true
  2. 具有相同属性的类在<bean>标签中指定其parent属性
  • 三、Bean的作用域(重要)

所谓Bean的作用域指的就是,当我们从IOC容器中采用getBean()方法获取bean的时候,每次取得是同一个实例对象,还是每次取得的是不同的实例对象,Spring默认采用单例模式实现,即:默认情况下,每次使用getBean()方法获取的bean都是同一个实例对象。

当你采用bean标签配置一个类的时候,Spring IOC容器是采用单例模式创建对象的,不论访问多少次,获取的是同一个对象

Spring默认情况下采用单例模式创建对象;Struts2的Action是采用多例模式创建的

Spring配置单例模式的Bean(默认形式)

<bean id="bean1" class="com.spring.Bean1" scope="singleton"/>

说明:Spring默认形式(即:不写scope="singleton")配置的Bean就是单例模式,所以此时scope="singleton"可以写也可以不写,一般当scope="singleton"时不写。

Spring配置多例模式的Bean

<bean id="bean1" class="com.spring.Bean1" scope="prototype"/>

说明:Spring配置多例模式的Bean,有时也称为原型Bean,其含义就是:每次采用getBean()方法返回的实例都是不同的(即:地址不同,也就是说每次返回的对象都是不同的对象)。

Bean的生命周期

Spring的IOC容器只能管理在配置文件中bean的scope属性等于singleton的Bean(即单例模式的Bean),此时Spring在初始化时,会自动创建scope=“singleton”类型的Bean,并将其纳管到IOC容器中进行统一的管理, scope=“singleton”的Bean的生命周期受IOC容器统一管理。

当scope=“prototype”时,Spring只负责创建(实例化)Bean,对于该Bean,Spring的IOC容器对其并不进行管理,即:当用户调用getBean()方法时Spring的IOC容器只负责为用户创建出来该Bean并将该Bean所有依懒关系注入好后,将该Bean返回给用户,该Bean的管理由用户自行管理。即:用户可以自行控制该Bean的生命周期。

IOC容器只能管理单例模式的bean(从创建、依赖关系注入、到销毁),而多例模式的bean Spring(IOC)只管创建、依赖关系注入,由垃圾回收器销毁,不会全部纳入IOC容器的管理

Bean的作用域小结

Spring中Bean的作用域    

<bean…/>标签的scope属性可以取以下值:    

  1. singleton:每次调用getBean()方法的时候返回相同的实例对象
  2. prototype:每次调用getBean ()方法的时候返回不同的实例对象
  •  四、根据名称自动装配(了解,不推荐使用)

所谓按名称自动装配是指,类中定义的引用的其它Bean的变量名称与配置文件中定义的bean的id值相同,这样Spring就会根据这个名称自动将相应的Bean注入给该类中相应的属性(成员变量),如下所示:

类中的定义:

public class Bean1 {
    private Bean2 bean2;
    //setter getter
}

配置文件中的bean的配置

<bean id="bean2" class="com.spring.Bean2"/>

说明:由于类中属性名为”bean2”,配置文中定义的bean的id也为”bean2”,所以Spring就会把配置文件中bean的id等于”bean2”的这个Bean注入到类中属性(成员变量)名为”bean2”的成员变量上来。  

配置文件中关于根据按名称自动装配的配置

第1种方式:该方式将影响整个配置文件中依赖关系的注入

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" 
default-autowire="byName">

default-autowire取值为以下五种:(自动装配有五种类型)

  1.  no(不自动装配,需要显示指定依懒注入关系)
  2.  byName(根据名称自动装配)
  3.  byType(根据类型自动装配)
  4.  constructor(按构造函数参数一致性匹配)
  5.  autodetect(先按constructor ,再按byType )

第2种方式:此种方式只影响某一个Bean的依赖关系的注入

<bean id="bean1" class="com.spring.Bean1" autowire="byName"/>

<bean id="bean5" class="com.spring.Bean5" />
  • 五、根据类型自动装配(了解,不推荐使用)

配置文件中配置同样有两种方式,全局和局部,与按名称一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值