前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring AOP配置详解

Spring AOP配置详解

作者头像
陈树义
发布2022-04-29 10:38:08
3030
发布2022-04-29 10:38:08
举报
文章被收录于专栏:陈树义陈树义

AOP(Aspect-Oriented Programming), 面向切面编程。

Spring提供的AOP技术可以让我们把软件系统中存在的通用处理作成一个切面,从而可以减少开发人员的工作量。其次,也使得代码更加容易管理。

在软件系统中最常见的权限控制、日志记录都可以做成一个切面,下面将结合以日志切面为例来介绍Spring AOP的配置和使用。

首先,以下介绍的都在另一篇博文的基础之上展开,如果你还未阅读过,建议你先阅读一下:Spring框架配置详情

本文将按照如下的思路进行介绍:

1.导入Spring AOP 以及 LOG4J 所必须的包

2.编写applicationContext.xml文件

3.编写日志切面类

4.编写log4j.properties日志配置文件并新建一个日志文件

5.运行测试类并检查切面中的日志记录是否写入了日志文件

一、导入Spring AOP 以及 LOG4J 所必须的包

点击这里下载:http://pan.baidu.com/s/1o6E1vzs 密码:uijc

下载所需的Jar包导到WEB-INF/lib目录。

二、编写applicationContext.xml文件

代码语言:javascript
复制
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" 
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4 xmlns:context="http://www.springframework.org/schema/context" 
 5 xmlns:aop="http://www.springframework.org/schema/aop" 
 6 xmlns:tx="http://www.springframework.org/schema/tx" 
 7 xsi:schemaLocation="http://www.springframework.org/schema/beans
 8            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 9            http://www.springframework.org/schema/context
10            http://www.springframework.org/schema/context/spring-context-2.5.xsd
11            http://www.springframework.org/schema/aop
12            http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
13            http://www.springframework.org/schema/tx 
14            http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
15 
16 
17     <!-- Spring整合Hibernate:直接饮用hibernate配置文件-->    
18     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
19         <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
20     </bean>
21     
22     <!-- 创建baseDao对象 -->
23     <bean id="baseDao" class="com.basehibernate.dao.impl.BaseDaoImpl">
24         <!-- 在Dao中使用hibernateTemplate必须注入sessionFactory -->
25         <property name="sessionFactory" ref="sessionFactory"/>
26     </bean>
27     
28     <!-- 将日志切面交给Spring容器管理 开始-->
29     <bean id = "logAspectJ" class="com.basehibernate.aop.LogAspectJ"/>
30     <aop:config>
31         <aop:aspect id="logaop" ref="logAspectJ">
32             <!-- 配置切入点 -->
33             <aop:pointcut id="logpointcut" expression="execution(* com.basehibernate.dao.impl.*.*(..))"/>
34             
35             <aop:before pointcut-ref="logpointcut" method="beforeAdvice"/>
36             <aop:after pointcut-ref="logpointcut" method="afterAdvice"/>
37         </aop:aspect>
38     </aop:config>
39     <!-- 将日志切面交给Spring容器管理 结束-->
40 </beans>

第28-40行代码为声明日志切面

三、编写日志切面类

LogAspectJ.java类:

代码语言:javascript
复制
 1 /**
 2  * 日志切面
 3  */
 4 package com.basehibernate.aop;
 5 
 6 import org.apache.log4j.Logger;
 7 import org.aspectj.lang.JoinPoint;
 8 
 9 public class LogAspectJ {
10     
11     public Logger logger = Logger.getLogger(LogAspectJ.class);
12     
13     //前置通知
14     public void beforeAdvice(JoinPoint jp)
15     {
16         String info = "【前置通知】:" + jp.getTarget().getClass().getName() + "类的" + jp.getSignature().getName() + "方法开始执行!";
17         logger.info(info);
18     }
19     
20     //最终通知
21     public void afterAdvice(JoinPoint jp)
22     {
23         String info = "【最终通知】:" + jp.getTarget().getClass().getName() + "类的" + jp.getSignature().getName() + "方法开始执行!";
24         logger.info(info);
25     }
26 }

五、编写log4j.properties日志配置文件并新建一个日志文件

在src目录下新建log4j.properties文件,配置LOG4J:

代码语言:javascript
复制
 1 #设置级别
 2 log4j.rootLogger=info,appender1
 3 
 4 #输出到文件(这里默认为追加方式)
 5 log4j.appender.appender1=org.apache.log4j.FileAppender
 6 #设置文件输出路径为文本文件
 7 log4j.appender.appender1.File=D:/Workspaces/BaseSpringAOP/WebRoot/log/system.log
 8 #设置文件输出样式
 9 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout  
10 log4j.appender.appender1.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:sss,SSS}] -%m%n 

在WebRoot下新建log文件夹,在log文件夹新建system.log日志文件。

六、运行测试类并检查切面中的日志记录是否写入了日志文件

代码语言:javascript
复制
 1 package com.basehibernate.test;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 import com.basehibernate.dao.BaseDao;
 7 import com.basehibernate.pojo.Employee;
 8 
 9 public class SpringTest {
10     
11     static ApplicationContext ctx = null;
12     @Test public void initParam()
13     {
14         ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
15         BaseDao dao = (BaseDao)ctx.getBean("baseDao");
16         
17         Employee empl = new Employee();
18         empl.setEmplName("员工222");
19         empl.setPassword("2222");
20         empl.setPwFlag(true);
21         empl.setAutoEat(true);
22         
23         dao.save(empl);
24     }
25 }

如果成功,将在system.log文件下可以看到:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档