`

Spring学习笔记(三)——Spring AOP

阅读更多
1.AOP及Spring AOP背景知识
Spring AOP由100% java开发完成,秉承java的一切优势。
目前,Spring AOP只实现了方法级的joinpoint,有些AOP实现支持域级的joinpoint,比如JBoss AOP、AspectJ。joinpoint(连接点模型)是指AOP Aspect能够在应用系统中执行的地方,比如某个方法调用之前、修改某个域之前。连接点模型的强弱在很大程度上决定了AOP实现功能的强弱。
尽管Spring也能够用于J2SE、J2ME应用,但主要是在J2EE应用中使用它(Spring team推荐如此)。在J2EE应用中,AOP能够拦截到方法集的操作已经足够了。再者,OOP倡导的是通过setter/getter方法访问域,而不是直接访问域。因此目前Spring仅提供方法级的joinpoint是恰当的。
借助于Spring AOP,Spring Ioc能方便的使用到非常健壮、灵活的企业级服务。Spring AOP能够提供如下几方面的优势:
1)允许开发者使用声明式企业级服务,比如事务服务、安全性服务。
2)开发者可以开发满足业务需求的自定义方面。如果标准的J2EE安全性不满足业务需求,则必须开发拦截器。
3)开发Spring AOP Advice很方便。因为这些AOP Advice仅仅是POJO类,借助于Spring提供的ProxyFactoryBean,能够快速搭建Spring AOP Advice。
为开发AOP使能应用,需要开发AOP Advice,这是AOP开发的主要内容。因为advice中包含了AOP aspect的主要逻辑。
将AOP中的advice约定为“装备”。通常存在如下5种装备(Advice)类型:
1)Before装备:在执行目标操作之前执行的装备;
2)Throws装备:如果目标操作在执行过程中抛出异常,则执行此装备;
3)After装备:在执行目标操作之后执行的操作;
4)Around装备:在方法调用前后执行的装备;功能强大,灵活性也最好,能够在执行目标操作前后执行,因此这对于一些需要做资源初始化和释放资源的操作的应用而言,特别有用。
5)Introduction装备:由于Introduction装备能为类新增方法,因此在5中装备中,它最复杂,最难掌握。
借助于上述5种装备,基本能解决J2EE中的常见问题。

2.Spring AOP装备
对于Spring AOP而言,开发者会涉及到如下接口:
org.springframework.aop.MethodBeforeAdvice 用于实现Before装备;
org.springframework.aop.AfterReturningAdvice 用于实现After装备;
org.springframework.aop.ThrowsAdvice 用于实现Throws装备;

借助于RegexpMethodPointcutAdvisor类实现了对LoggingBeforeAdvice(此类为精通Spring源代码中example5中的类,实现了MethodBeforeAdvice接口,实现了其他装备接口的类集成方法类似)装备的集成,完成了pointcut和拦截器的定义。
Spring AOP由纯Java开发,开发者不需要对配置了装备的任何类进行编译工作。由于Spring AOP没有采用控制类装载器的方式来实现AOP,因此Spring AOP能使用与任何web容器应用服务器中,比如tomcat和Jboss。对于代理java接口的场景,Spring默认是采用动态代理实现的;对于代理java类的场景,Spring使用了动态字节码生成技术。
使用Spring AOP实现的各种装备类型时,ProxyFactoryBean起了很重要的作用(位于appcontext.xml)。
同其他Spring FactoryBean实现一样,ProxyFactoryBean也引入了间接层。需注意,通过名字或者id(比如,“helloworldbean”)获得的引用对象并不是ProxyFactoryBean实例本身,而是ProxyFactoryBean中getObject()方法实现返回的对象。其中,getObject方法将创建AOP代理,并将目标对象包裹(wrapper)在其中。代码示例:
       
Resource resource = new ClassPathResource("appcontext.xml");
        BeanFactory factory = new XmlBeanFactory(resource);
        IHelloWorld hw = (IHelloWorld) factory.getBean("helloworldbean");

配置文件中的内容为:
  
<bean id="helloworldbean"
                   class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="proxyInterfaces">
         <value>com.openv.spring.IHelloWorld</value>
      </property>
      <property name="target">
         <ref local="helloworldbeanTarget"/>
      </property>
          <property name="interceptorNames">
         <list>
            <value>loggingAfterAdvisor</value>
         </list>
      </property>
   </bean>


开发者也可以借助于Spring AOP手工创建AOP代理。因此,这将不会依赖于Spring Ioc容器,而只是Spring AOP本身。不过不推荐这么使用,它不符合Spring框架的初衷。
Spring开发框架Team推荐:借助于Spring Ioc框架自动创建AOP代理,并将有关AOP代理的java代码通过Spring配置文件配置。
另外,FactoryBean在Spring框架中起了很重要的作用。ProxyFactoryBean实现了FactoryBean接口,借助于ProxyFactoryBean的强大功能,开发者能够实现满足各种业务需求的实现。但这要求开发者去额外开发很多辅助业务操作的功能,比如事务、数据库连接等操作。因此,Spring框架针对具体方面提供了大量的实用类(注意,它们并不是继承于ProxyFactoryBean,而是实现了FactoryBean接口):
TransactionProxyFactoryBean,SimpleRemoteStatelessSessionProxyFactoryBean,RmiProxyFactoryBean,LocalStatelessSessionProxyFactoryBean

3.对象池
开发者在与数据库交互的过程中,通常会使用到连接池。它能够在应用实际使用数据库连接前,同目标RDBMS建立物理连接。Spring框架借助于Jakarta Commons Pool或者其他技术,提供有效的对象池实现。












分享到:
评论

相关推荐

    Spring技术内幕学习笔记.docx

    《Spring技术内幕》学习笔记1——IoC容器体系结构 《Spring技术内幕》学习笔记2——IoC定位Bean定义资源 《Spring技术内幕》学习笔记3——IoC容器载入Bean定义资源文件 ...《Spring技术内幕》学习笔记7——AOP基础

    spring aop 学习笔记

    NULL 博文链接:https://microjava.iteye.com/blog/525796

    Spring Aop 学习笔记

    Spring Aop 学习笔记

    SpringAop学习笔记以及实现Demo

    SpringAOP学习笔记以及四个可运行的Demo,涵盖经典代理模式、基于注解、基于xml配置这3方面的Demo

    Spring AOP学习笔记

    NULL 博文链接:https://linres.iteye.com/blog/281221

    spring ioc aop mvc boot-学习笔记.docx

    自己学习spring课程的笔记。笔记都是根据尚硅谷的课程(spring ioc,spring aop,spring mvc,spring boot等)写的。 主要内容:spring ioc,spring aop,spring mvc,spring boot

    javaSpring学习笔记

    在“Java Spring学习笔记”中,你将找到对Spring框架的全面介绍,包括IoC(控制反转)和DI(依赖注入)原理、AOP(面向切面编程)、Spring MVC、Spring Boot等核心内容。每个主题都结合了理论知识和实际示例,帮助你...

    Spring学习笔记

    Spring学习笔记Spring spring的配置 IOC 依赖注入 基于Xml的注入 基于注释的注入 Spring的自动注入和属性自动注入 AOP 静态代理 动态代理 使用spring实现AOP 基于Annotation实现AOP 基于XML实现AOP ...

    spring学习笔记

    spring从HelloWorld到ioc,aop,对JDBC,hibernate,struts1,struts2的支持笔记

    Spring的学习笔记

    第三课:模拟Spring功能 5 第四课:搭建sping的运行环境 8 一、 建立一个新的项目 8 二、 建立spring的配置文件 8 三、 引入spring的jar包 8 四、 测试代码: 8 五、 注意接口的使用: 8 第五课:IOC(DI)配置及应用 ...

    spring学习笔记(有代码有注解解释)

    内容概要:学习Spring的一些学习笔记,主要学习Spring 框架两大核心机制(IoC、AOP) 笔记大纲:阅读笔记可以学习了解一下内容 如何使用 IoC ;配置文件;IoC 底层原理;通过运行时类获取 bean;通过有参构造创建 ...

    Spring学习笔记总结

    Spring最新资料总结,包含SpringMVC,IOC,AOP面向切面编程,以及与Struts2,Hibernate的集成.

    JBoss ESB 学习笔记

    自己辛苦整理的网上的...13——第十二个ESB代码Spring AOP 113 14——第十三个ESB代码Transform CSV to XML 122 15——第十四个ESB代码Transform XML to POJO 128 16——第十五个ESB代码Web Service Consumer 1 151

    spring的学习笔记

    spring很好的学习笔记,我想对于想学好或者面试好ioc和aop的同学有帮助的

    Spring学习笔记.zip

    反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库...

    Spring入门学习笔记|Spring学习.pdf

    Spring入门学习笔记,内容包括Spring介绍,Spring配置文件,Spring配置数据源,Spring的注解开发,Spring集成Junit,Spring的AOP,jdbcTemplate介绍,Spring控制事务流程,Spring集成web。

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    NULL 博文链接:https://coolszy.iteye.com/blog/541997

    Spring框架学习笔记文档

    Spring框架的学习笔记,包括了springIOC,spirng注入,springAoP,SpringJdbc模板的使用,Spring声明式事务。

    Spring学习思维笔记.xmind

    spring学习笔记脑图,简单理解aop ioc 事务管理,和spring的基本结构以及底层原理所用到的设计模式

Global site tag (gtag.js) - Google Analytics