Spring

01Spring

IOC&DI

一、IOC

一、Spring简介
Spring是分层的JavaSe/EE应用full-stack轻量级开源框架。
一、Spring体系结构
1.底层是核心容器
	(1) Beans
	(2) Core
	(3) Context
	(4) ApringEI表达式
2.中间层技术
	(1) AOP
	(2) Aspects
3.应用层技术
	(1) 数据访问与数据集成
	(2) Web集成
	(3) Web实现
4.基于Test测试
二、Spring优势
1、方便解耦,简化开发
2、方便集成各种优秀框架
3、方便编程的测试
4、AOP编程的支持
5、声明事务的支持
6、降低JavaEE API使用难度
二、IOC简介
一、耦合与内聚
1、耦合(Coupling):代码在书写过程中所使用技术结合的紧密度,用于衡量软件中各个模块
   之间的互连程度。 
2、内聚(Cohesion):代码在书写过程中单个模块内部各个组成部分之间的联系,用于衡量软件
   中各个功能模块内部的功能联系。
3、程序书写的目标:高内聚,低耦合。
二、IOC
IOC(Inversion Of Control): 控制反转,Spring反向控制应用程序所需要使用的外部资源。
三、IOC配置
<!--
  bean标签
    作用:让spring 创建这个类的对象
    属性:
      id : 用来配置这个对象的标识,以后使用这个标识,就可以从spring的容器中取得该
      	   对象!必须唯一
      name : 用来给这个对象起别名, 多个别名之间可以使用 逗号 分号 空格 来间隔
      class : 写上类的全路径
      scope :
         singleton : 表示创建的是单列对象
         prototype : 表示创建的事多列对象
      生命周期:
         init-method:
            单例: 创建工厂的时候,就创建了对象,并且执行初始化方法【只执行一次】
            多列: 问工厂要对象才会创建,要多少个对象,就创建多少个
          destroy-method:
             单列: 关闭工厂的时候,就调用这个方法
             多列: 关闭工厂,不会调用方法
 -->
<bean id="us" class="com.cwl.service.impl.UserServiceImpl" scope="prototype" init-method="init" destroy-method="destroy"/>
<!--
	factory-bean,factory-method
	使用实例工厂的形式创建bean对象,兼容早期遗留系统的升级工作。
-->
<!--使用实例方法创建对象-->
<bean id="factory" class="com.cwl.factory.InstanceFactory"/>
<bean id="us" factory-bean="factory" factory-method="getBean"/>

二、DI

一、DI
DI(Dependency Injection): 依赖注入,应用程序运行依赖的资源由spring为其提供,
   资源进入应用程序的方式称为注入。
二、IOC与DI关系
IOC与DI是同一件事(同一份资源)站在不同角度看待问题。
三、依赖注入的两种方式
1.	Set注入
2.	构造器注入
3. 从容器的角度来看,依赖注入就是让容器把自己拿着的资源|对象,丢给|注入给对象。
4. 从对象的角度来看,希望spring的容器把他管理的资源|对象,注入进来。
5. 因此不管从哪个角度来看,都是需要注入进来的资源|对象,那么类|对象都必须要使用
   变量|属性来接收它。
6. 依赖注入,其实是让spring完成对类|对象中的属性赋值工作。 
  1. Set注入
1、把UserServiceImplUserDaoImpl两个实现类都交给spring管理。
2、在UserServiceImpl实现类中定义一个属性,用来接收dao对象。
3、提供属性set方法,告诉spring要通过调用set方法,把dao对象注入进来给属性,
   从而完成属性的赋值工作【完成注入工作】。
<!--把UserServiceImpl和UserDaoImpl两个实现类都交给spring管理-->
<bean id="ud" class="com.cwl.dao.impl.UserDaoImpl"/>
<bean id="us" class="com.cwl.service.impl.UserServiceImpl">
<!--
	property:
		作用: 用来完成依赖注入,告诉spring要调用属性set方法来完成注入。
		属性:
			name: 类当中的属性名字
			ref: 用来注入对象,需要把另一个对象的id值放进来
			value: 用来注入普通数据
					基本数据类型  String
-->
	<property name="userDao" ref="userDao"/>
	<property name="address" value="北京">
</bean>
  1. 构造器注入–有参构造
<bean id="ud" class="com.cwl.dao.impl.UserDaoImpl"/>
<bean id="us" class="com.cwl.service.impl.UserServiceImpl">
  <!--
    constructor-arg
      作用: 用来告诉spring要执行该类的有参构造方法
      属性:
        name: 形参名字
        ref: 给这个形参,注入对象数据
        value: 给这个形参 注入普通数据
  -->
  <constructor-arg name="userDao" ref="ud"/>
  <constructor-arg name="address" value="北京"/>
</bean>

3.Set注入–使用p名称空间的方式完成依赖注入

<bean id="ud" class="com.cwl.dao.impl.UserDaoImpl"/>
  <!--
    p 名称空间
       1. 简化了property的写法,使用的还是set方法注入
       2. 特征:
          2.1 如果给普通属性注入值, p:属性名=”“
          2.2  如果给对象属性注入值, p:属性名-ref=""
  -->
<bean id="us" class="com.cwl.service.impl.UserServiceImpl"
          p:address="北京" p:userDao-ref="ud"/>

4.注入properties文件内容

<!--1. 导入外部的properties文件-->
<context:property-placeholder location="db.properties"/>
<!--2. 完成注入-->
<bean id="us" class="com.cwl.service.impl.UserServiceImpl">
   <property name="driver" value="${db.driver}"/>
   <property name="url" value="${db.url}"/>
   <property name="username" value="${db.username}"/>
   <property name="password" value="${db.password}"/>
</bean>

5.集合类型数据注入

1、arrays
2、list
3、set
4、map
5、props

6.合并两个applicationContext.xml

<import resource="applicationContext-dao.xml"/>
<import resource="applicationContext-service.xml"/>
四、ApplicationContext
1. ApplicationContext是一个接口,提供了访问spring容器的API。
2. ClassPathXmlApplicationContext是一个类,实现了上述功能。
3. ApplicationContext的顶层接口是BeanFactory4. BeanFactory定义了bean相关的最基本操作。
5. ApplicationContextBeanFactory基础上追加了若干新功能。
五、FileSystemXmlApplicationContext
可以加载文件系统中任意位置的配置文件,而ClassPathApplicationContext只能加载类路
径下的配置文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值