Spring-Aop-XML配置 方式
什么是面向切面编程
把纵向编码发展为横向编码,给某一块代码添加一些新的功能
在JavaSE的学习中,我们常用的代码复用方法是继承,通过继承的方法可以实现业务逻辑,
继承是树状的,如下所示,即为向下发展的编程逻辑
然而运用了面向切面编程的思想之后
五大名词解释
织入:就是切入,将切面与切入点结合这是个逻辑过程
通知:增强方法
切入点:选定的方法
切面:被通知的对象
连接点:任何类的方法
Aop编程的特点
1.低侵入性:即不改变原有代码!只是在前或后添加增强方法
2.扩展性:扩展了基本的业务功能
Aop原理:代理模式
静态代理模式:以AspectJ为代表
动态代理模式:Aop
将复杂的需求分解出不同的方面,将散布在系统中的公共功能集中解决!其底层是通过代理模式组装起来进行运行!
常见的用途:记录日志
方法前的日志:访问者、权限、登入方式等
方法后的日志:状态标记等
编程步骤
1.导入相关jar包
2.在主配置文件中引入约束
3.编写一个User类
package com.sxh.pojo;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private String addr;
private String memo;
public void run() {
System.out.println(this.name+"在跑!!");
}
@Override
public String toString() {
return "User [name=" + name + ", address=" + addr + ", memo=" + memo + "]";
}
}
4.写一个增强方法
package com.sxh.aop;
import java.lang.reflect.Method;
import java.util.Arrays;
import org.apache.log4j.Logger;
import org.springframework.aop.MethodBeforeAdvice;
/*
* MethodBeforeAdvice接口来实现前置增强
*/
public class LogBeforeAdvice implements MethodBeforeAdvice{
/* 1.创建一个日志对象 clazz:给哪个类记录日志*/
private static final Logger logger=Logger.getLogger(LogBeforeAdvice.class);
@Override
public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
// TODO Auto-generated method stub
//2.打印
logger.info("调用"+arg2+"的"+arg0.getName()+"方法入参:"+Arrays.toString(arg1));
}
}
5.在主配置文件中进行配置
6.编写一个测试类
public class SpringTest {
private static ApplicationContext ctx;
public static void main(String[] args) {
ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=ctx.getBean("user",User.class);
user.run();
}
}