您的位置:首页 > 编程语言 > Java开发

Spring及Spring的两大特性IOC和AOP

2017-12-28 18:19 169 查看
PS--很多例子图片上传不了,留给自己看吧—_—

Spring的诞生是为了满足企业级系统的一些需求,那么,企业级系统有那些特点,spring究竟带来了那些好处呢

1.简单介绍企业级应用的特点

2.简介EJB的不足,引入Spring

3. EJB的缺点

1巨大而复杂的规格说明:对于一个复杂的分布式系统,有一个文档进行说明是一件很合理的事情。但是,并不是所有的文档信息都是真正必需的,EJB的文档反而成了一个非常不便利的工具。

2庞大的文件,复杂的业务:开发设计一个项目之前,通常需要阅读1000多页的需求说明书文档。这是部署EJB时非常痛苦的事情。

3增加程序调试时间:制定EJB解决方案比远比使用普通的Java代码所需的时间长,调试EJB程序也比调试普通的Java代码所需要的时间也长。主要原因是我们不知道bug是出在代码本身还是出在容器上。

4EJB代码更加复杂:举个例子,为了实现一个sessionbean,必须写三个类,为了实现一个实体bean,要写四个类。增加几个部署描述语句,比如说最简单的“Helloworld”程序需要10个文件,而不是一个文件。

5重复设计的危险:导致这种结果的原因是复杂的文档所致。。如果你没有完全理解EJB的概念,你就不会很好的驾奴它,让它你所用,反之为你所累。

6维护困难:EJB是一个不断更新的技术,在新技术不断推出的时候,代码需要升级,这就就需要额外的努力和成本来使你的程序和新的EJB容器兼容。

7学习比较难,开发难度大

8 依赖应用服务器

9 运用大量的设计模式

引入spring之后,spring的依赖注入可以统一管理和生成javabean,哪有需要调用就往哪注入,这种方式大大降低了开发难度,

降低了代码的耦合度,给后期的维护也带来了方便

同时spring的aop还能将系统中那些类似于日志管理,事务管理等分布性比较强,但又必须有的代码集中生成,无需开发人员关注,提高工作效率。

1148a
Spring:轻量级的企业级开发框架

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配置文件,完成业务层和数据访问层组件的定义和装配

关键代码:

<bean id="userDao" class="dao.impl.UserDaoImpl" />

<bean id="userService" class=“service.impl.UserServiceImpl">

<property name="dao">

<ref bean="userDao" />

</property>

</bean>

通过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配置文件中添加<aop:aspectjautoproxy/>元素

---------------------------------------------------------------------------------------------------

-----在Spring中实现AOP步骤(老方法):

1.为项目添加Spring的AOP支持

2.编写目标方法和增强处理:

3.在Spring配置文件中定义切入点:

4.在切入点织入增强处理:

5.获取链接点信息:

--UserServiceLogger类中定义了before()和afterReturning()两个方法。我们希望把before( )方法作为前置增强使用,即将该方法添加到目标方法之前执行;

afterReturning( )方法作为后置增强使用,即将该方法添加到目标方法正常返回之后执行。这里以前置增强和后置增强为例。

为了能够在增强方法中获得当前连接点的信息,以便实施相关的判断和处理,可以在增强方法中声明一个JoinPoint类型的参数,Spring会自动注入该实例。

通过该实例的getTarget()方法可以得到被代理的目标对象,getSignature()方法返回被代理的目标方法,getArgs()方法返回传递给目标方法的参数数组。

对于实现后置增强的afterReturning()方法,还可以定义一个参数用于接收目标方法的返回值。

增强处理类型:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: