Spring(二)

来源:互联网 发布:php数组最大长度限制 编辑:程序博客网 时间:2024/06/06 00:38

我们知道:


与下面这个:


是相同的意思。

1、什么是IOC容器?

依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架)。Spring就是一个IOC容器。
他不是技术,而是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而反转是由容器来帮忙创建及注入依赖对象。反转后,真正掌握业务逻辑的是不是我们的bean对象。

2、spring中的bean配置

配置形式:基于XML文件配置的方式、基于注解的方式。

Id: Bean的名称,在IOC容器中必须是唯一的。

在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前,必须对它进行实例化。只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用。

通过ApplicationContext接口。

WebApplicationContext 是专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作。(Spring MVC中使用)


从IOC容器中获取Bean,调用ApplicationContext的getbean()方法。

3、三种实例化bean的方式

  1. 使用类构造器实例化(默认使用)
  2. 使用静态工厂方法实例化(简单工厂模式)
  3. 使用实例工厂方法实例化(工厂方法模式)

4、bean的scope属性

在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域.
默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建一个唯一实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例。该作用域被称为 singleton, 它是所有 Bean 的默认作用域。
<!-- Scope 的取值测试 --><!-- 如果没有指定Scope,默认值已是singleton --><bean id="scope" class="com.tz.spring.scope.Scope" scope="prototype"></bean>

5、依赖注入的三种方式

spring支持三种依赖注入的方式:
    1. 属性注入
    2. 构造器注入
    3. 接口注入(很少使用不推荐)

5.1 属性注入

属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值
属性注入是实际应用中最常用的注入方式
<!-- 配置一个通过setter注入的属性值 --><bean id="helloService" class="com.tz.spring.service.impl.HelloServiceImpl"><!-- 为属性赋值 --><property name="name" value="飞杨同学"></property></bean>

5.2 构造器注入

通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
构造器注入在 <constructor-arg> 元素里声明属性, <constructor-arg> 中没有 name 属性
<!-- 配置一个通过构造器注入的属性值 --><bean id="hiService" class="com.tz.spring.service.impl.HiServiceImpl"><!-- 为属性赋值 --><constructor-arg value="阿忠同学"></constructor-arg></bean>

扩展:
使用 <property> 元素 ref属性,引入另一个Bean对象,完成Bean之间注入。
<bean id="userService1" class="com.tz.spring.service.impl.UserServiceImpl"><property name="name" value="及第同学"></property><!-- 引用外声明的list --><property name="cars" ref="cars"></property> </bean>

p:<属性名>="xxx" 引入常量值

p:<属性名>-ref="xxx" 引用其它Bean对象

<bean id="userService2" class="com.tz.spring.service.impl.UserServiceImpl"  p:cars-ref="cars" p:name="南笙"></bean>

使用p必须引用p名称空间。
改写<property>注入为 p名称空间注入。

5.3 集合属性注入

在<list/>, <set/>, <map/>, 和<props/>元素中,也可以设置值和参数分别对应Java的集合类型List, Set, Map, 和 Properties
<bean id="gather" class="com.tz.spring.entity.Gather"><property name="strVal" value="I am String"></property><property name="intVal" value="100"></property><property name="listVal"><list><value>list1</value><value>list2</value><value>list4</value><value>list5</value></list></property><property name="setVal"><set><value>set1</value><value>set2</value><value>set4</value></set></property><property name="mapVal"><map><entry key="k1" value="map1"></entry><entry key="k2" value="map2"></entry><entry key="k3" value="map3"></entry></map></property></bean>

6、延迟初始化bean(懒加载)

ApplicationContext实现的默认行为就是再启动时将所有singleton bean提前进行实例化。 通常这样的提前实例化方式是好事,因为配置中或者运行环境的错误就会被立刻发现,否则可能要花几个小时甚至几天。如果你不想 这样,你可以将单例bean定义为延迟加载防止它提前实例化。延迟初始化bean会告诉Ioc容器在第一次需要的时候才实例化而不是在容器启动时就实例化。

在XML配置文件中,延迟初始化通过<bean/>元素的lazy-init属性进行控制,比如:
<!-- 测试lazy加载  false : 没有赖加载,  true 表示这个Bean已经赖加载--><bean id="gatherOther" class="com.tz.spring.entity.GatherOther" lazy-init="false"></bean>

7、使用多个XML配置文件

方式一 可以在创建ApplicationContext对象时传入多个配置文件

ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("beans1.xml", "beans2.xml");

方式二 可以在配置文件中通过<import>引入其他配置文件
<import resource="classpath:bean2.xml"/>



原创粉丝点击