Spring AOP与IOC
Spring AOP实现日志服务
pom.xml需要的jar
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.4.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.4.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.4.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.2.4.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.4.RELEASE</version>
</dependency>
<dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>3.2.0</version>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.8</version>
</dependency>
<dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version>
</dependency>
<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version>
</dependency>
<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
</dependency>
1.Before Advice
Before Advice会在目标方法执行之前被调用,可以通过实现org.springframework.aop.MethodBeforeAdvice接口实现。
LogBeforeAdvice.java
package com.blog.csdn.net.unix21;import java.lang.reflect.Method;
import java.util.logging.Level;
import org.springframework.aop.MethodBeforeAdvice;
import java.util.logging.Logger;/**** @author http://blog.csdn.net/unix21/*/
public class LogBeforeAdvice implements MethodBeforeAdvice {private Logger logger=Logger.getLogger(this.getClass().getName());public void before(Method method,Object[] args,Object target) throws Throwable{logger.log(Level.INFO,"日志信息>>>method starts..."+method);}
}
beans-config.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<bean id="LogBeforeAdvice" class="blog.csdn.net.unix21.LogBeforeAdvice"/>
<bean id="HelloSpeaker" class="blog.csdn.net.unix21.HelloSpeake"/>
<bean id="HelloProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="proxyInterfaces" value="blog.csdn.net.unix21.IHello"/><property name="target" ref="HelloSpeaker"/><property name="interceptorNames"><list><value>LogBeforeAdvice</value></list></property>
</bean>
</beans>
接口
IHello.java
package blog.csdn.net.unix21;public interface IHello {
public void hello(String name);
}
HelloSpeaker.java
package blog.csdn.net.unix21;public class HelloSpeaker implements IHello {public void hello(String name){System.out.println("Hello, "+name);}
}
测试Before Advice
ApplicationContext context=new ClassPathXmlApplicationContext("beans-config.xml");IHello h=(IHello)context.getBean("helloProxy");h.hello("blog.csdn.net.unix21")
运行成功使用AOP的方式打印日志信息:
参考:《Spring 2.0技术手册》
Spring 3.1编写AOP时需要导入的倚赖jar包汇总
菜鸟学SSH(七)——Spring jar包详解
2.After Advice
After Advice会在目标方法执行之后被调用,可以通过实现org.springframework.aop.AfterReturningAdvice接口来实现
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.aop.AfterReturningAdvice;public class LogAfterAdvice implements AfterReturningAdvice {
private Logger logger=Logger.getLogger(this.getClass().getName());public void afterReturning(Object object, Method method, Object[] args, Object target) throws Throwable {logger.log(Level.INFO,"日志信息<<<method ends..."+method);}
}
修改beans-config.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<bean id="LogBeforeAdvice" class="blog.csdn.net.unix21.LogBeforeAdvice"/>
<bean id="HelloSpeaker" class="blog.csdn.net.unix21.HelloSpeake"/>
<bean id="HelloProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="proxyInterfaces" value="blog.csdn.net.unix21.IHello"/><property name="target" ref="HelloSpeaker"/><property name="interceptorNames"><list><value>LogBeforeAdvice</value><value>LogAfterAdvice</value></list></property>
</bean>
</beans>
成功的执行了LogAfterAdvice 相关文章:

matlab求解外弹道,基于MATLAB∕Simulink的通用质点外弹道程序设计.pdf
2017.01 设计与研发基于 MATLAB/Simulink 的通用质点外弹道程序设计崔 瀚(沈阳工学院兵器类虚拟仿真实验教学中心, 辽宁抚顺 ,113122 )摘要:本文以弹丸质点外弹道学为研究对象,通过分析以时间为 自变量的质点外弹道方程组,借助 MATLAB/Simuli…

深入Java虚拟机读书笔记[10:20]
第十章 栈和局部变量操作 第十一章 类型转换 第十二章 整数运算 第十三章 逻辑运算 第十四章 浮点运算 第十五章 对象和数组 第十六章 控制流 第十七章 异常 以上一些是操作码相关的内容, 第十八章 finally子句 微型子例程 字节码中的finally子句表现的很像微型子例…

docker Rails Permission denied @ dir_s_mkdir
sudo chmod 777 -R public转载于:https://www.cnblogs.com/znsongshu/p/9777543.html
图形化的Redis监控系统redis-stat安装
Redis需要监控才知道具体运行信息,虽然Redis也提供了info等命令行,但是毕竟不方便而且不能保存历史信息。 redis-stat是一个用ruby写成的监控redis的程序,基于info命令获取信息,而不是通过monitor获取信息。 关于Redis的安装参考此…

Oracle简单脚本演示样例
Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR VARCHAR2(5000); VN_COUNT NUMBER; BEGIN --查看现有系统是否有BT_PRODUCT_MODEL表 SELECTCOUNT(…

matlab看fft帮助,日记 [2009年06月02日] MATLAB FFT HELP 帮助文档及我的翻译
fftFast Fourier Transform 的缩写, 即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在…

用Kotlin在IntelliJ Idea中无法生成 spring-configuration-metadata.json 文件
为什么80%的码农都做不了架构师?>>> 问题描述 在百度搜索关键词,搜索到了 Stack Overflow 有相关问题 spring-configuration-metadata.json file is not generated in IntelliJ Idea for Kotlin ConfigurationProperties class 原文链接: https://stack…
Linux系统轻量级监控工具monitorix和munin安装
提到监控工具,大家都会想到zabbix等重量级的,这些好是好,但是需要安装数据库等等,如果有时候希望简单点其实可以借助一些轻量级的监控工具,例如monitorix和munin。需要做点前置工作开启Nginx和php-fpm的status…

MySql 查询表字段数
MySql 查询表字段数 SELECT COUNT(*) FROM information_schema.columns WHERE table_schematest_cases AND table_namecases_send ; test_cases 为数据库名称 cases_send 为表名 列出表字段名称 SHOW COLUMNS FROM cases_send

phpstudy2014 php7.0,phpstudy下载_phpStudy下载2014 官方版_php环境集成包 1.0_零度软件园...
phpStudy 1.7.0 (phpStudy V1.65 Build 080120)该程序包集成最新的ApachePHPmysqlphpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等…
AndroidApplication优化解耦
Application后处理器(AndroidPostProcessing): 通过注解配置初始化各模块及应用所需 sdk,按优先级/延时时间/是否只在Debug下有效/执行线程 等条件初始化 sdk 通常,我们要在 Application 中处理一堆的三方 SDK 和自定义…

Git 详解
1. Git 1.1. Git是何方神圣? Git是用C语言开发的分布版本控制系统。版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态)。另一个状 态可以是不同的文件,也可以是不同的文件内容。举个例子&…

shell基础语法以及监控进程不存在重启
转码 # dos2unix ./test.sh 权限# chmod ax ./test.sh语法 变量 var"111" echo $var echo ${var}运算 no14; no25; let resultno1no2 echo $result;自增自减少 let no let no--[]和let类似 result$[ no1 no2 ] result$[ $no1 5 ] 也可以使用(()),但使…

java md5算法,JAVA实现MD5算法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package org.zcq100.Other;public class MD5 {static final int S11 8;static final int S12 13;static final int S13 18;static final int S14 23;static final int S21 7;static final int S22 11;static final int S23 …

Hulu直播服务难点解析(一):系统需求
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/83053654 Hulu在其博客发布了建立直播服务遇到的挑战及解决方案,这对于以前只提供点播服务的系统而言是一次彻底的升级。Li…

Velocity 入门(一)
Velocity是一种Java模版引擎技术,该项目由Apache提出。因为非常好用,和工作中有啥用,所以我在在理简单的入门一下。 网上找了很多教程,写的不是很明白,要么就是全部拷贝下来时候运行不起来。 在这里我来写一份比较完成…

php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法
原文:https://www.cnblogs.com/libolun/p/13434675.html单继承关于继承的一些基本概念1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类(衍生类),被继承的类叫做父类(基类,超类)2.继承的种类:1.单继承 2.多继承3…
最新版IntelliJ IDEA 15开发Java Maven项目
IntelliJ IDEA是最好的java开发IDE之一 下载地址:http://www.jetbrains.com/idea/download/1.安装好之后开始创建项目2.选择Maven类型项目,选择JDK3.设置Maven坐标4.需要给新项目Add Framework support5.选择Java EE项目模板6.初始的网站修改pom.xml文件…

Android APP全面屏适配技术要点
全面屏的概念 为什么先要解释一下全面屏,因为这个词在现在来讲就是一个伪命题。全面屏字面意思就是手机的正面全部都是屏幕,100%的屏占比。但是现在推出所谓“全面屏”手机的厂商没有一个能达到全面的。 那么下面来说一下Android开发领域对全面屏的理解和…
PHP数据库连接池SQL Relay安装使用
SQL Relay按照其官网http://sqlrelay.sourceforge.net/index.html上所说是:A powerful database connection management solution. 翻译为中文也就是说SQL Relay是一个开源的数据库池连接代理服务器。目前SQL Relay支持的数据库很多: SQL Relay supports…
oracle实例由,Oracle数据库和实例
Oracle数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例是一组管理数据库文件的内存结构。 另外,数据库由后台进程组成。一个数据库和一个实例是紧密相连的,因此术语 - Oracle数据库 通常用来指…

说一说activity
activity与service,provider,receiver并称为 android的四大对象。 而activity,是展现界面的必不可少的组件。我这里有几个问题要问了,他是如何加载,他是如何进行npc的。具体是怎么实现的了。 说道activity的加载&#…

zookeeper脑裂
出现: 在搭建hadoop的HA集群环境后,由于两个namenode的状态不一,当active的namenode由于网络等原因出现假死状态,standby接收不到active的心跳,因此判断active的namenode宕机,但实际上active并没有死亡。此…

C语言编写的PHP框架--yaf入门编程
首先--添加dll,修改php.ini--不同的版本,不同的需求 其次,根据教程http://www.laruence.com/manual/tutorial.firstpage.html#tutorial.directory手动搭建好目录结构 入口文件index.php位置稍作修改--个人习惯 入口文件内容 <?php header…
调试JDK源码-ConcurrentHashMap实现原理
调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因ConcurrentHashMap线程安全的总结是我从源码分析出来的: ConcurrentHashMap所谓线…

oracle某个表丢失,丢失一个控制文件并恢复数据库
只丢失或损坏一个控制文件的情况下来恢复数据库,相对来说简单一点。一般来说,控制文件都需要形成一个多路径冗余策略,来提高数据库的安全性。这样的话只需将完好的控制文件复制一个副本放到丢失或者损坏了的控制文件所在路径的目录下…

MySQL:一个死锁分析 (未分析出来的死锁)
最近一个朋友给了我一个死锁 没分析出来搞了好几天,但是把以前出现的一个死锁理了一下流程。这里大概记录一下,并且给出朋友的案例。 RC 隔离级别很少出GAP我已经知道的 继承和分裂会出LOCK_GAP这是代码写死的purge线程可能触发页的分裂融合可能触发内部…
经历一次真实的XSS跨站攻击以及应付之策
这是一个线上真实的事情,黑客已经攻破网站,并主动给我们上报了问题的根源以及解决方案还是不错的。1.前端网站某处存在用户评论输入,黑客再此输出跨站脚本,下面的是从数据库查出来的2.后台管理人员如果浏览到这条数据就会触发这个…

在linux中 要删除abc目录,在 Linux 中,要删除 abc 目录及其全部内容的命令为:
【单选题】星子本地人说( )【判断题】音乐的音响,虽然不能直接传达抽象概念,但是却可以通过同构联觉的去描摹围绕着抽象概念的氛围。( )【判断题】专项耐力负荷量度是通过对糖酵解无氧代谢供能能力与非乳酸供能无氧耐力能力的监控实现的。【单选题】电动轮廓仪是根据( )原理制成…

ECHO.js 纯javascript轻量级延迟加载
演示 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"utf-8"> <title>简单的JavaScript图像延迟加载库Echo.js</title> <style> .demo img { width: 736px; height: 490px; background: url(images/…