PS--很多例子图片上传不了,留给自己看吧—_—
Spring的诞生是为了满足企业级系统的一些需求,那么,企业级系统有那些特点,spring究竟带来了那些好处呢
7学习比较难,开发难度大
8 依赖应用服务器
9 运用大量的设计模式
引入spring之后,spring的依赖注入可以统一管理和生成javabean,哪有需要调用就往哪注入,这种方式大大降低了开发难度,
降低了代码的耦合度,给后期的维护也带来了方便
同时spring的aop还能将系统中那些类似于日志管理,事务管理等分布性比较强,但又必须有的代码集中生成,无需开发人员关注,提高工作效率。
Spring一共有十几个组件,但是真正的核心组件只有几个,Spring框架的总体架构图,了解一下他的体系结构。
从这个图中可以看出Spring框架的核心组件只有三个:Core、Context和Beans。他们构建起了整个Spring的骨骼架构,没有他们就不可能有AOP、Web等上层的特性功能。
上面这些是Spring特性功能。。比较重要的几个包:AOP包(主要提供面向切面编程的实现),Web(主要提供了Web应用开发的支持及针对Web应用的MVC思想实现)、
ORM (对象关系映射,为 Mybatis 这类持久化框架提供支持)、还有 SpringMVC (这个是它自带的一个 web 视图层,可以替代到 Sturts2 )。。等等,其中最最核心的就是 AOP 和下面 Spring 核心包。
使用IoC解耦合
实现步骤一:
1.创建工程并添加Spring支持
2.创建业务层和数据访问层接口
3.编写业务层和数据访问层实现类
4.在业务实现类中添加DAO接口引用和相关访问器,注意JavaBean命名规范
关键代码:
private UserDao userDao;//userDao属性的setter访问器,会被Spring调用,实现设值注入
public void setUserDao(UserDao userDao){
this..userDao = userDao;}
实现步骤二:
1.编写Spring配置文件,完成业务层和数据访问层组件的定义和装配
关键代码:
userDao" />
通过ApplicationContext接口的实现类获取组件
关键代码:
ApplicationContext ac = newClassPathXmlApplicationContext(
"applicationContext.xml");
UserService = (UserService )ac.getBean("userService ");
----------------------------------------------------------------------------------------------------------------
AOP是一种思想,它与具体实现技术无关,任何一种符合AOP的思想的技术实现,都可以看做是AOP的实现。通过java的动态代理机制,就可以很容易实现AOP思想,实际上Spring的AOP也是建立在java代理机制上。
AOP实际上是由目标类的代理类实现的。AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用。AOP代理
包含了目标对象的全部方法,但是AOP代理中的方法与目标对象的方法存在差异,AOP方法是在特定切入点添加了增强处理,并回调了
目标对象的方法。
---总结对AOP的理解:
业务处理的主要流程就是核心关注点,与之关系不大的部分就是横切关注点。横切关注点的一个特点是:他们经常发生在核心关注
点的多处,而各处基本相似,比如权限认证、日志、事务处理。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切
关注点分离开来。
所谓面向切面编程:是一种通过预编译和运行期动态代理的方式实现不在修改源代码的情况下给程序动态添加功能的技术。
-----在Spring中使用注解定义切面:
为项目添加AOP的annotation支持
添加目标方法和增强处理
在增强处理类中使用annotation定义切入点并织入增强处理
在Spring配置文件中添加
---------------------------------------------------------------------------------------------------
-----在Spring中实现AOP步骤(老方法):
1.为项目添加Spring的AOP支持
2.编写目标方法和增强处理:
3.在Spring配置文件中定义切入点:
4.在切入点织入增强处理:
5.获取链接点信息:
--UserServiceLogger类中定义了before()和afterReturning()两个方法。我们希望把before( )方法作为前置增强使用,即将该方法添加到目标方法之前执行;
afterReturning( )方法作为后置增强使用,即将该方法添加到目标方法正常返回之后执行。这里以前置增强和后置增强为例。
为了能够在增强方法中获得当前连接点的信息,以便实施相关的判断和处理,可以在增强方法中声明一个JoinPoint类型的参数,Spring会自动注入该实例。
通过该实例的getTarget()方法可以得到被代理的目标对象,getSignature()方法返回被代理的目标方法,getArgs()方法返回传递给目标方法的参数数组。
对于实现后置增强的afterReturning()方法,还可以定义一个参数用于接收目标方法的返回值。
增强处理类型: