Java Web Spring核心之AOP的解析及实战(AOP的实现、切入点、Aspect Spring的持久化 Hibernate)

简介: Java Web Spring核心之AOP的解析及实战(AOP的实现、切入点、Aspect Spring的持久化 Hibernate)

前言


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


1:切面(aspect)


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


2:连接点(join point)


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

1666442935137.jpg

3:切入点(pointcut)


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


4:通知(advice)


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

1666442953122.jpg

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开头的方法名都是切入点

<bean id="pointcutAdvisor"
 class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
 <property name="advice">
 <ref bean="MyAdvisor"/>
 </property>
<property name="patterns">
<list>
<value>.*getConn*.</value>
<value>.*closeConn*.</value>
</list>
</property>
</bean>


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 是切入点的配置器 结构如下

image.png

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

1666443232269.jpg

事务应用的管理


1:编程式事务管理


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


2:声明式事务管理


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


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


应用JdbcTemplate操作数据库


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


配置JdbcTemplate和数据源

<!--配置JdbcTemplate>
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
 <property name="dataSource">
 <ref local="dataSource"/>
</property>
</bean>


获取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类以及相应的子类 使用户时可以简化程序编写的资源


相关文章
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1643 3
|
人工智能 搜索推荐 Java
Spring AI与DeepSeek实战三:打造企业知识库
本文基于Spring AI与RAG技术结合,通过构建实时知识库增强大语言模型能力,实现企业级智能搜索场景与个性化推荐,攻克LLM知识滞后与生成幻觉两大核心痛点。
1887 7
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
3412 1
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
4705 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1588 2
Spring Boot 3.x 微服务架构实战指南
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
2732 0
|
12月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
存储 算法 安全
JWT深度解析:现代Web身份验证的通行证为什么现在都是JWT为什么要restful-优雅草卓伊凡
JWT深度解析:现代Web身份验证的通行证为什么现在都是JWT为什么要restful-优雅草卓伊凡
851 41
JWT深度解析:现代Web身份验证的通行证为什么现在都是JWT为什么要restful-优雅草卓伊凡

热门文章

最新文章

推荐镜像

更多
  • DNS