Spring核心概念
-
Spring的概念:
Spring是一个轻量级框架,提供了IOC容器,AOP实现,数据访问支持,还有Web集成。它大大简化了Java企业级开发,提供了强大、稳定的功能。
Spring有两个主要目标:一是让现有技术更易于使用,二是促进良好的编码习惯。
-
Spring Ioc
控制反转,也被称为依赖注入,它将组件对象的控制权从代码本身,转移到外部容器,用来降低程序代码之间的耦合度。
组件化的思想:分离关注点,接口和实现分离。
-
Spring AOP
面向切面编程,是对面向对象编程的有益补充。Aop一般适用于具有横切逻辑的场合,如访问控制、事务管理、性能检测等。
原理:从系统中分离出切面,将散布在系统中的公共功能独立于业务逻辑集中解决,运行时,织入代码。
好处,可以让程序员专心做事。
Ioc 和 Aop 使用扩展
-
多种方式实现依赖注入
-
设值注入
使用Spring通过setter访问器实现了对属性的赋值,这种做法称为设值注入。
使用灵活,但时效性不足,并且大量的setter访问器增加了类的复杂性。
-
-
构造注入
创建需要注入属性的构造函数,使用<constructor-arg><ref bean=””/></constructor-arg>注入。
时效性好,但是局限于重载的形式,灵活不足。
-
使用p命名空间实现属性注入
添加p命名空间,注入属性
<bean id=”” class=”” p:username=”aa” p:dao-ref=”userDao”/>
-
注入不同数据类型
注入基本值可以用value属性,也可以用<value>标签
注入特殊字符时,可以用<![CDATA[值]]>标记,也可以把字符替换成实体引用。
< :< >:> &:&
‘ :' “ :"
注入null用<null/>,z注入空字符串用<value></value>
-
增强类型
-
前置增强:在方法执行前插入的增强
-
后置增强:在执行完方法后插入的增强
-
异常抛出增强:在目标方法抛出异常时织入增强
-
环绕增强:在目标方法的前后都可以织入增强
-
-
使用注解定义增强
-
在项目中添加相关jar文件
-
使用注解定义增强
-
使用@Aspect注解将类定义为切面
-
使用@Before(“execution(* biz.impl.*.*(..))”)定义前置增强
-
使用@AfterReturning (“execution(* biz.impl.*.*(..))”)定义后置增强
-
使用@AfterThrowing (“execution(* biz.impl.*.*(..))”,throwing=”e”)定义异常抛出增强
-
使用@Around (“execution(* biz.impl.*.*(..))”)定义环绕增强
-
-
编写Spring配置文件,织入注解定义的增强
-
导入aop命名空间添加<aop:aspect-autoproxy/>织入增强
-
-
编写代码获取带有增强处理的业务对象
-
-
-
基于Schema配置定义切面
-
三种定义增强方式:
使用接口定义增强,使用注解定义增强,使用Spring配置通过aop命名空间声明增强
-
-
配置增强
//声明增强方法所在的Bean
<bean id="log"class="advice.Schema"></bean>
<!-- 使用Schema配置增强 -->
<aop:config>
<aop:pointcutexpression="execution(* biz.impl.*.*(..))"id="pointcut"/>
<aop:aspect ref="log">
*************************后置增强********************
<aop:beforemethod="before" pointcut-ref="pointcut"/>
<aop:after-returning method="afterReturning"pointcut-ref="pointcut" returning="returnValue"/>
</aop:aspect>
</aop:config>