Spring——(2)IOC和DI&相关配置

IOC和DI

IOC:控制反转

对象的创建权交给spring

DI:依赖注入  把类的属性注入

面向对象时想利用别的类的属性实现的方法:

不能面向接口编程,

spring

只需加入property标签

编写测试

2.Spring 工厂

BeanFactory            :老版本的工厂类

ApplicationContext  :新版本的工厂类

BeanFactory            :老版本的工厂类

BeanFactory:调用getBean的时候,才会生成类的实例

ApplicationContext  :新版本的工厂类

ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。

ApplicationContext有两个实现类

ClassPathXmlApplicationContext  :加载类路径下的配置文件

FileSystemXmlApplicationContext   :加载文件系统下的配置文件

Spring的配置

(1)Schema的配置

步骤1:找到preferences


3.Bean的相关的配置

<bean>标签的id和name的配置

id                 :使用了约束中的唯一约束。里面不能出现特殊字符的

name         :没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。

spring在加载配置的时候不知道加载哪个bean就出错了

Spring和Struts1框架整合的时候

<bean name=”/user” class=””/>

4.Bean的生命周期的配置(了解)

init-method                 :Bean被初始化的时候执行的方法

destroy-method         :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

                                  

与配置的方法名必须相同

工厂关闭   单例模式创建实例

创建销毁方法(配置中也要写)

5.Bean的作用范围的配置(重点)

<scope>                            :Bean的作用范围

singleton          :默认的,Spring会采用单例模式创建这个对象。

                            无论多少程序调用,只会new一次,每次用的都是同一个对象实例

prototype        :多例模式。(Struts2Spring整合一定会用到)

                             用一次new一次

                             Action是多例的,Action交给spring管理必须配置成多例模式

                             否则spring在创建action实例的时候,值栈就会出错(有个action实例就会有个值栈)

很多请求用一个值栈会出问题 这边保存的数据保存到值栈,另一个修改的也保存到该值栈,最后想取出来的值都是乱的

request              :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。(request域)

session               :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。

globalsession    :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

                            例如百度,当我们登录了百度之后,其旗下的应用可以直接登录如百度地图,在我们登录了百度之后,我们就可以直接登录其百度地图不用做新的认证

单例:

多例:

这里并没有被销毁。因为内存中 有多高对象,不知道销毁哪个。

6.Spring的Bean的实例化方式

Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式:

(1)无参构造

(2)静态工厂

(3)实例工厂实例化

无参构造:

类中创建无参构造

静态工厂

方法加static+配置factory-method配置

(3)实例工厂实例化

7.属性注入(DI)

类的属性赋值

(1)构造方法

(2)set方法设置

(3)接口注入

但spring支持前两种方法

构造方法:

set方法设置

接口注入:spring不支持

spring进行注入:

name和price属性和值

set方法

配置:

上面注入的都是普通类型

下面是注入对象(引用类型)(构造和set相同)

也要用ref

给Employ注入Car2(上面的Car2)

8.P名称空间的属性注入(Spring2.5以后)

通过引入p名称空间完成属性的注入:

写法:

普通属性         p:属性名=”值”

对象属性         p:属性名-ref=”值”

P名称空间的引入                    前提

普通类型:

引用类型:

9.SpEL注入

引用类型注入:

引用其他类型的属性和方法;

10.复杂类型的注入(数组或集合)

集合一般是框架内部使用

数组:

List集合

set方法

<!-- Spring的集合属性的注入============================ -->
	<!-- 注入数组类型 -->
	<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
		<!-- 数组类型 -->
		<property name="arrs">
			<list>
				<value>王东</value>
				<value>赵洪</value>
				<value>李冠希</value>
			</list>
		</property>
		
		<!-- 注入list集合 -->
		<property name="list">
			<list>
				<value>李兵</value>
				<value>赵如何</value>
				<value>邓凤</value>
			</list>
		</property>
		
		<!-- 注入set集合 -->
		<property name="set">
			<set>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</set>
		</property>
		
		<!-- 注入Map集合 -->
		<property name="map">
			<map>
				<entry key="aaa" value="111"/>
				<entry key="bbb" value="222"/>
				<entry key="ccc" value="333"/>
			</map>
		</property>
	</bean>

map简单的方式注入:

还有复杂的方法

通常配置不需要,spring整合Hibernate时,把Hibernate的映射做成一个集合(框架内部)

11.Spring的分模块配置

分模块的开发:

两种方法:

(1)加载配置文件的时候,加载多个

(2)在一个配置文件中引入多个

1)加载配置文件的时候,加载多个

2)在一个配置文件中引入多个

猜你喜欢

转载自blog.csdn.net/qq_29235677/article/details/88602630
今日推荐