Spring核心概念
IoC的定义和原理
1.什么是控制反转
将组建对象的控制权从代码本身转移到外部容器
组建化的思想:分离关注点,使用接口,不再关注实现
依赖的注入:将组件的构建和使用分开
目的:解耦合。实现每个组件时
只关注组件内部的事情
要点:明确定义组件间的接口
使用IOC有哪些好处
解耦合
更利于程序的扩展
工厂模式:根据我们提供的我们所需的对象实例的描述,为我们返回所需要的产品
1.产品的规范
2.产品
3.工厂
4.客户端/调用者
使用Spring IoC进行设值注入(一)
使用Spring IoC的步骤是什么?
1.引入它所依赖的jar包(五六个jar包)
2.编写HelloSpring类(这个类就是Spring IoC要管理的类)
3.编写配置文件(采用bean元素声明HelloSpring的对象实例)
4.通过property元素指定被赋值的属性名
5.用value元素指定具体的赋值的内容
经验:
设值注入
使用元素定义一个组件
Id属性:指定一个用来访问的唯一名称
Name属性:指定多个别名,名字之间使用逗号、分号或空格进行分隔
实现动态组装的打印机
依赖注入综合示例
问题:
如何开发一个打印机?
可灵活配置使用彩色墨盒或灰色墨盒
可灵活配置打印页面的大小
分析:
打印机功能的实现依赖于墨盒和纸张
步骤:
定义墨盒和纸张的接口标准
使用接口标准开发打印机
组装打印机
运行打印机
AOP的定义和原理
面向切面编程(AOP)
横切逻辑,也叫横切关注点
AOP的目标:让我们可以”专心做事”
AOP原理
将复杂的需求分解出不同方面,将公共功能集中解决
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能
所谓面向切面编程,是一种通过预编译方式和运行期/代理实现在不修改源代码的情况下给程序动态添加功能的技术
AOP相关术语
增强处理(Advice)
前置增强
后置增强
环绕增强、异常抛出增强、最终增强等类型
切入点(Pointcut)
连接点(Join Point)
切面(Aspect)
目标对象(Target object)
AOP代理(AOP proxy)
织入(Weaving)
AOP实现自动的系统日志功能
实现步骤
1.在项目中添加Spring AOP的jar文件
2.编写前置增强和后置增强实现日志功能
3.编写Spring配置文件,对业务方法进行增强处理
4.编写代码获取带有增强处理的业务对象
怎样使用AOP
织入增强处理
织入:在切入点插入增强处理
IoC和AOP使用扩展
控制反转 ioc 是框架的重要特征,并非面向对象编程的专用术语。它与依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)并没有关系。
IoC最大的好处是什么?
因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拔(有点像USB接口和SCSI硬盘了)。 Spring的控制反转就是将实例化对象的权力由类交给Spring框架来执行
Dependency Injury 依赖注入。 通过IOC创建对象的时候,可以注入字符串甚至其他对象。 比如DAO就会注入session factory. 通常IOC和DI是紧密结合,一起使用的 Spring 依赖注入例子
通常IOC和DI是紧密结合,一起使用的
Spring 依赖注入例子
<bean id=“User” Class=“test1.User”>
<property name=“id” value=“2”/>
</bean>
依赖注入的方式
1.普通的数据类型注入标签
<bean id=“User” Class=“test1.User”>
<property name=“id” value=“2”/>
</bean>
- p空间属性注入
在这里插入代码片xmlns:p="http://www.springframework.org/schema/p"
<bean id="userDao" class="dao.UserDao"/>
<bean id="userServer" class="server.UserServer“ p:dao-ref="userDao"/>
<bean id=“user” class=“test.User” p:id=“1”/>
特点:使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码 语法: 对于直接量(基本数据类型、字符串)属性:p:属性名=“属性值” 对于引用Bean的属性:p:属性名-ref=“Bean的id”
3.构造注入
public User(int id){this.id=id;}
<bean id=“user” class=“test1.User”>
<constructor-arg name="id" value="123"></constructor-arg>
</bean>
注入:
1、注入直接量(基本数据类型、字符串) 如果XML中包含特殊字符(&、<、>、”、’),就使用<![CDATA[]]>标记或把特殊字符替换为实体引用
2、引用其他Bean组件 注入Bean类型的语法:p:属性名-ref=“Bean的id” 使用子元素注入:
3、注入集合类型的属性: 使用、、