IT俱乐部 Java Spring开发核心之AOP的实现与切入点持久化

Spring开发核心之AOP的实现与切入点持久化

前言

AOP(Aspect Oriented Program 面向切面编程)的实现基于Java的代理机制, 下面介绍Spring Aop的术语

1:切面(aspect)

切面是对象操作过程中的截面 如图19.1所示 切面是指图中的平行四边形

2:连接点(join point)

连接点是指对象操作过程中的某个阶段点 实际上是对象的一个操作 如图19.2所示

3:切入点(pointcut)

切入点是连接点的集合 如图19.3 切面与程序流程的交叉点便是程序的切入点

4:通知(advice)

通知是某个切入点被横切后,所采取的逻辑,也就是说 在切入点处拦截程序后,通过通知来执行切面

5:目标对象(target)

所有被通知的对象都是目标对象 被AOP所关注

6:织入(weaving)

织入是将切面功能应用到目标对象的过程 由代理工厂创建一个代理对象 这个代理可以为目标对象执行切面功能

7:引入(introduction)

对一个已编译完类 在运行时期 动态地向这个类中加载属性和方法

一、AOP的简单实现

利用Spring AOP使日志输出与方法分离 让在调用目标方法之前执行日志输出

public class Target{
 public void execute(String name){
System.out.printIn("程序开始执行"+name);
}
}

通知可以拦截目标对象的execute方法 并执行日志输出

public class LoggerExecute implements MethodInterceptor{
 public Object invoke(MethodInvocation invocation) throws Throwable{
before();
invocation.proceed();
return null;
}
private void before(){
System.out.printIn("程序开始执行");
}
}

创建代理从而使用AOP功能

public class Manger{
public static void main(String[] args){
Target target=new Target();
ProxyFactory di=new ProxyFactory();
di.addAdvice(new LoggerExecute());
di.setTarget(target);
Target proxy=(Target)di.getProxy();
proxy.execute("AOP的简单实现");
}
}

二、Spring的切入点

1:静态切入点

静态意味着不变,无论在程序的任何位置调用 方法名都不会改变 配置文件如下

指定所有以getConn开头的方法名都是切入点

.*getConn*..*closeConn*.

2:动态切入点

动态切入点应用在相对变化的位置

深入静态切入点

实际上Spring使使用boolean matches(Method,Class)方法来匹配切入点的

public boolean matches(Method method,Class targetClass){
return(method.getName().equals("execute"));
}

深入切入点底层

Pointcut接口是切入点的定义接口 用它来规定可切入的连接点的属性 通过对该接口的扩展可以处理其他类型的连接点 接口定义代码如下

public interface Pointcut{
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}

使用ClassFilter接口来匹配目标类 代码如下

public interface ClassFilter{
boolean matches(Class class);
}

使用MethodMatcher接口来匹配目标类的方法或方法的参数

public interface MethodMatcher{
boolean matches(Method m,Class targetClass);
boolean isRuntime();
boolean matches(Method m,Class targetClass,Object[]args);
}

isRuntime方法返回false则执行静态切入点 true则执行动态切入点

三、Aspect对AOP的支持

Aspect是对系统中的对象操作过程中截面逻辑进行模块化封装的AOP概念实体,在通常情况下,Aspect可以包含多个切入点和通知

Advisor就是Spring中的Aspect 是切入点的配置器 结构如下

1:DefaultPointcutAdvisor切入点配置器

它可以把一个通知配给一个切入点 使用之前 首先要创建一个切入点和通知

首先创建一个通知

public TestAdvice implements MethodInterceptor{
public Object invoke(MethodInvocation mi)thorws Throwable{
Object Val=mi.proceed();
return Val;
}
}

创建自定义切入点 重写matches和getclassfilter方法

public class TestStaticPointcut extends StaticMethodMatcherPointcut{
public boolean matches(Method method Class targetClass){
return("targetMethod".equals(method.getName());
}
public ClassFilter getClassFilter(){
return new ClassFilter()
{
public boolean matches(Class clazz){
return(clazz==targetClass.class);
}
};
}
}

分别创建一个通知和切入点实例

Pointcut pointcut=new TestStaticPointcut();
Advice advice=new TestAdvice();

2:NameMatchMethodPointcutAdvisor 切入点配置器

使用它可以更简洁的将方法名设定为切入点

NameMatchMethodPointcutAdvisor advice=new NameMatchMethodPointcutAdvisor(new TestAdvice());
advice.addMethodName("targetMethod1name");
...

四、Spring持久化

1:DAO模式

DAO代表数据访问对象(Data Access Object) 它描述了一个应用中的DAO角色 它提供了读写数据库中数据的一种方法,把这个功能通过接口提供对外服务 使得解耦合,对于整个系统性能有巨大的提升

Spring DAO抽象提供了以下几类

1:JdbcDaoSupport JDBC DAO抽象类 开发者需要为他设置数据源 通过子类 开发者能够获得JdbcTmeplate来访问数据库

2:HibernateDaoSupport 通过其子类 开发者能够获得Hibernate实现

3:JdoDaoSupport 通过其子类 开发者能够获得JdoTemplate

事务应用的管理

1:编程式事务管理

在Spring中主要有两种编程式事务的实现方法 分别使用PlatfromTransactionManager接口的事务管理器或者TransactionTemplate实现 但是推荐使用Transaction Template实现方式 因为它符合Spring的模板模式

2:声明式事务管理

Spring的声明式事务管理不涉及组建依赖关系 它通过AOP实现事务管理 Spring本身就是一个容器 相对于EJB容器而言 Spring显得更为轻量级

在Spring中常用TransactionProxyFactoryBean完成声明式管理

应用JdbcTemplate操作数据库

JdbcTemplate类式Spring的核心类之一 它在内部类已经处理完了数据库资源的创建和销毁 只需在代码中提供sql语句即可

配置JdbcTemplate和数据源



 
 

获取JdbcTemplate对象 并利用它的update方法执行数据库的添加操作

DriverManagerSource ds=null;
JdbcTemplate jtl=null;
Resource resource=new ClassPathResource("applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(resource);
jtl=(JdbcTemplate)factory.getBean("jdbcTemplate");
String sql="insert into table()values()";
jtl.update(sql);

与Hibernate整合

Spring整合了对Hibernate的设定 Spring中提供了HibernateTemplate类和HibernateDaoSupport类以及相应的子类 使用户时可以简化程序编写的资源

到此这篇关于Spring开发核心之AOP的实现与切入点持久化的文章就介绍到这了,更多相关Spring AOP 内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

相关文章

  • java操作xml的方法汇总及解析

    这篇文章主要介绍了java操作xml的方法汇总及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    2019-11-11

  • Java黑科技之通过Google Java Style 文件配置IDEA和Ecplise代码风格

    在日常开发中,多人团队协作开发一个项目是很常见的,特别是大公司,这就会涉及到多人在一个工程上开发代码.无规矩不成方圆,一个好的代码风格,更加有利于团队协作,减少代码冲突,提高代码可阅读性,美观性.本文就带着大家仔细研究这个黑科技
    ,需要的朋友可以参考下

    2021-05-05

  • java 一个类实现两个接口的案例

    这篇文章主要介绍了java 一个类实现两个接口的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    2020-10-10

  • Java堆内存又溢出了!教你一招必杀技(推荐)

    这篇文章主要介绍了Java内存溢出问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    2019-04-04

  • Springboot启动原理详细讲解

    这篇文章主要介绍了SpringBoot启动原理的分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    2022-07-07

  • java中枚举原来还可以这么用

    这篇文章主要给大家介绍了关于java枚举原来还可以这么用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    2019-09-09

  • Java实现简单的迷宫游戏详解

    迷宫游戏作为经典的小游戏,一直深受大家的喜爱。本文小编将为大家详细介绍一下如何用Java实现一个简单的迷宫小游戏,感兴趣的可以动手试一试

    2022-02-02

  • springmvc path请求映射到bean 方法的流程

    这篇文章主要介绍了springmvc path请求映射到bean 方法的流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    2021-07-07

  • 新浪开源轻量级分布式RPC框架motan简单示例解析

    这篇文章主要为大家介绍了新浪开源轻量级分布式RPC框架motan的简单示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

    2022-03-03

  • SpringBoot利用validation实现优雅的校验参数

    数据的校验是交互式网站一个不可或缺的功能,如果数据库中出现一个非法的邮箱格式,会让运维人员头疼不已。本文将介绍如何利用validation来对数据进行校验,感兴趣的可以跟随小编一起学习一下

    2022-06-06

最新评论

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/java/5380.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部