Spring3学习笔记
来源:互联网 发布:淘宝二手回收手机骗局 编辑:程序博客网 时间:2024/06/05 08:06
Spring3学习笔记
- Spring3学习笔记
- 一Spring简介
- 二IOC详解
- 三DI
- 一注入方式
- 六AOP面向切面编程
- 一AOP基础
- 二基于配置Schema的AOP
一、Spring简介
Spring 是一个开源的轻量级应用开发框架。使用Spring可以简化开发流程,Spring可以帮我们管理对象和依赖关系,提供通用日志记录、性能统计、安全控制、事务处理等。
- Ioc容器
- AOP
- 事务管理
- JDBC
- MVC框架
- and so on
非侵入式设计:应用程序不需继承框架的类或接口即可使用框架提供的功能。方便代码重用和框架切换。
- POJO:简单JAVA对象,只包含业务逻辑或持久化逻辑。
- 容器:提供运行环境,如Tomcat;管理对象生命周期和依赖关系,如Spring。
- AOP:AOP是Aspect Oriented Programming的缩写,意思是面向切面编程。抽取通用的代码逻辑,在需要的时候动态织入到程序中去。
二、IOC详解
- IOC:控制反转,它不是一项技术,而是一种设计思想。IOC容器控制了对象的生命周期和依赖关系,将对象的获取方式反转了。
- DI:依赖注入,它是IOC的同一个概念的不同角度描述
- IOC容器:具有依赖注入功能的容器,Spring中的是BeanFactory,其实现类有ApplicationContext、WebApplicationContext、ClassPathXMLApplicationContext、FileSystemXMLApplicationContext。
- Bean:由IOC容器管理的对象叫Bean。
- IOC容器使用BeanDefinition类来表示bean在xml文件中的定义信息。主要包含:
- 全限定名
- Bean在容器中的行为,包括作用域、是否惰性初始化、生命周期
- Bean的创建方式:构造器、工程方法
- Bean依赖关系,即对其他Bean的引用
- Bean命名:id是唯一标识符;只有name时,name也可做标识符,可以有别名(alias)
Bean定义方式:
无参构造器:
<bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>
有参构造器:
<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2"> <!-- 指定构造器参数 --> <constructor-arg index="0" value="Hello Spring!"/> </bean>
静态工厂方式
<!-- 使用静态工厂方法 --> <bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"/> </bean>
实例工厂方式
<!—1、定义实例工厂Bean --> <bean id="beanInstanceFactory" class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/> <!—2、使用实例工厂Bean创建Bean --> <bean id="bean4" factory-bean="beanInstanceFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"></constructor-arg> </bean>
假如A类依赖B接口对象,这时B接口有多个实现类注册到了IOC容器中,在注入的时候,spring会报错:重复定义
Spring的IOC有两层含义:Bean依赖容器和容器注入Bean的依赖资源。好处如下:
- 动态替换Bean依赖对象,程序更灵活;
- 更好实践面向接口编程,代码更清晰;
- 更好实践优先使用对象组合,而不是继承;
- 增加Bean可复用性;
三、DI
(一)注入方式
构造器注入
可分为三种:根据参数索引注入、根据参数类型注入、根据参数名注入,其中索引注入可靠性最高,参数类型注 入中除了制定类型外,还要按照构造函数的参数列表顺序来注入。
构造器注入是需要相应的构造函数的,Spring的BeanFactory会根据配置文件中配置的参数(即constructor)的个数、类型等属性来匹配构造器,如果构造器匹配失败则抛出异常<!-- 直接用构造器进行类属性的注入 ,属性映射使用相应构造器的参数列表的index进行映射--><bean id="byIndex" class="com.rambo.domain.Person"> <constructor-arg index="0" value="Hello World!" /> <constructor-arg index="1" value="1" /></bean><!--使用静态工厂类来调用构造器进行注入 ,属性映射使用相应构造器的参数列表的index+type进行映射 --><bean id="byType" class="com.rambo.domain.PersonStaticFactory" factory-method="newInstance"> <constructor-arg type="java.lang.String" value="Hello World!" /> <constructor-arg type="int" value="2" /></bean><!--使用实例工厂类来调用构造器进行注入 ,属性映射使用相应构造器的参数列表的index+name进行映射,不建议使用 --><bean id="byName" class="com.rambo.domain.PersonFactory" factory-method="newInstance"> <constructor-arg name="message" value="Hello World!" /> <constructor-arg name="index" value="3" /></bean>
setter注入
其先通过默认构造器实例化Bean以后,再通过setter方法将属性设值,所以该类的默认构造器不能被覆盖。<!-- 通过setter方式进行依赖注入 --> <bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4"> <property name="message" value="Hello World!"/> <property name="index"> <value>1</value> </property> </bean>
可以看出来,value如果用简写的方式,指定的全是字符串,类型转换的工作有Spring容器来处理,如果转换出错将抛出相应的异常。
Spring类型转换系统对于boolean类型进行了容错处理,除了true/false外,还可以用yes/no、on/off、1/0来表示。
六、AOP–面向切面编程
(一)AOP基础
- AOP:面向切面编程,是一种编程范式。
- 模板方法:接口定义方法fun(),实现类A实现fun(),并定义模板方法funA(), 子类继承A,并实现funA()。
- AOP相关概念:
- 关注点:可以认为是所关注的任何东西,如支付组件;
- 关注点分离:将问题细化为不可分割的组件,如支付组件和日志组件;
- 横切关注点:一个组件无法完成所需的功能,需要其他组件协助完成,如日志组件横切于支付组件;
- 织入:横切关注点分离后,需要通过某种技术将横切关注点融合到系统中来完成需要的功能;织入可能发生在编译期、加载期、运行期等。
- 横切关注点有很多,如非业务的:日志、事务处理、缓存、性能统计、权限控制;也有可能业务的。
- AOP的作用:
- 分离横切关注点并织入;
- 完善OOP;
- 降低组件和模块之间的耦合性;
- 使系统容易扩展;
- 更好地复用组件。
- AOP基本概念:
- 连接点(Jointpoint):表示在什么地方进行横切关注点的插入,如:类初始化、方法执行、方法调用、字段调用、异常处理等,Spring只支持方法执行的连接点,在哪里干
- 切入点(Pointcut):连接点的集合,Spring支持perl5正则表达式和AspectJ切入点模式,默认使用AspectJ语法,在哪儿干的集合
- 通知(Advice):在连接点上执行的行为,包括前置通知(before advice)、后置通知(after advice)、环绕通知(around advice),Spring通过代理模式实现AOP,并通过拦截器模式以环绕连接点的拦截器链织入通知,干什么
- 方法/切面(Aspect):横切关注点的模块化,如日志组件。Spring中可以使用Schema和@AspectJ方式进行组织实现,在哪儿干和干什么的集合
- 引入(inter-type declaration):内部类型声明,为已有的类添加新的字段/方法。
- 目标对象(Target Object):需要织入横切关注点的对象,亦作”被通知对象”,Spring中是被代理对象,即委托对象,对谁干
- 织入(Weaving):将切面应用到目标对象从而创建出AOP代理对象的过程,可以在编译期、类装载期、运行期进行。
(二)基于配置(Schema)的AOP
0 0
- Spring3 MVC 学习笔记
- Spring3.X学习笔记
- Spring3学习笔记
- Spring3学习笔记
- struts2+spring3+hibernate3学习笔记
- Spring3表达式语言(SpEL)学习笔记
- Spring3表达式语言(SpEL)学习笔记
- 学习Spring3.0的笔记(杂)
- Spring3的IOC的annotation学习笔记
- spring3.x + activemq学习笔记(一)
- Spring3表达式语言(SpEL)学习笔记
- Spring3.X学习笔记5-SpringAOP基础
- Spring3学习
- Struts2.2.1+Hibernate3.6+spring3.1注解开发学习笔记
- Spring3.1学习笔记之——事务
- 学习Spring3.X 企业应用开发实战笔记(一)
- 学习Spring3.X 企业应用开发实战笔记(二 )
- 基于注解的spring3.0.x MVC学习笔记(二)
- GitLab 的配置与使用
- C#中常用的几种读取XML文件的方法
- Qml中的model-view-delegate实例
- linux根文件管理
- spring mvc 上传图片
- Spring3学习笔记
- salesforce 零基础学习(六十六)VF页面应善于使用变量和函数(二)常用函数的使用
- idea mac debug 卡顿0-30秒问题
- 安卓 自定义通知
- 关于Lorem ipsum
- JAVA中三种URL连接方法
- Tomcat如何配置和启动
- centos7 最小化安装后再装上界面
- 梁贿:闪客缺乏了创新是否可行