其他分享
首页 > 其他分享> > Spring的AOP

Spring的AOP

作者:互联网

Sping的AOP

1.Spring的AOP简介

常用的动态代理技术

知识要点

2.基于 XML 的 AOP 开发

快速入门

① 导入 AOP 相关坐标

②创建目标接口和目标类(内部有切点)

③ 创建切面类(内部有增强方法)

④ 将目标类和切面类的对象创建权交给 spring

⑤ 在 applicationContext.xml 中配置织入关系

⑥ 测试代码

① 导入 AOP 相关坐标

<!--导入spring的context坐标,context依赖aop--> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>5.0.5.RELEASE</version>
</dependency>
<!-- aspectj的织入 --> 
<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.8.13</version>
</dependency>

② 创建目标接口和目标类(内部有切点)

public interface TargetInterface {
	public void method();
}
public class Target implements TargetInterface {
    @Override
    public void method() {
    	System.out.println("Target running....");
	}
}

③ 创建切面类(内部有增强方法)

public class MyAspect {
    //前置增强方法
    public void before(){
    	System.out.println("前置代码增强.....");
	} 
}

④ 将目标类和切面类的对象创建权交给 spring

<!--配置目标类--> 
<bean id="target" class="com.ropz.aop.Target"></bean>
<!--配置切面类--> 
<bean id="myAspect" class="com.ropz.aop.MyAspect"></bean>

⑤ 在 applicationContext.xml 中配置织入关系

导入aop命名空间

配置切点表达式和前置增强的织入关系

<aop:config>
	<!--引用myAspect的Bean为切面对象--> 
    <aop:aspect ref="myAspect">
		<!--配置Target的method方法执行时要进行myAspect的before方法前置增强--> 				<aop:before method="before" pointcut="execution(public void 
com.ropz.aop.Target.method())"></aop:before>
	</aop:aspect>
</aop:config>

⑥ 测试代码

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml")
public class AopTest { 
    @Autowired
	private TargetInterface target;
	@Test
	public void test1(){
	target.method();
	} 
}

XML 配置 AOP 详解

通知的配置语法:

<aop:通知类型 method=“切面类中方法名” pointcut=“切点表达式"></aop:通知类型>

切点表达式的抽取

当多个增强的切点表达式相同时,可以将切点表达式进行抽取,在增强中使用 pointcut-ref 属性代替 pointcut 属性来引用抽取后的切点表达式。

<aop:config>
	<!--引用myAspect的Bean为切面对象--> 
    <aop:aspect ref="myAspect"> 
        <aop:pointcut id="myPointcut" expression="execution(* com.ropz.aop.*.*(..))"/>
		<aop:before method="before" pointcut-ref="myPointcut"></aop:before>
	</aop:aspect>
</aop:config>

知识要点

3.基于注解的 AOP 开发

快速入门

① 创建目标接口和目标类(内部有切点)

public interface TargetInterface {
	public void method();
}
public class Target implements TargetInterface {
    @Override
    public void method() {
    	System.out.println("Target running....");
	}
}

② 创建切面类(内部有增强方法)

public class MyAspect {
	//前置增强方法
	public void before(){
		System.out.println("前置代码增强.....");
	} 
}

③ 将目标类和切面类的对象创建权交给 spring

@Component("target")
public class Target implements TargetInterface {
	@Override
	public void method() {
		System.out.println("Target running....");
	} 
}
@Component("myAspect")
public class MyAspect {
	public void before(){
		System.out.println("前置代码增强.....");
	}
}

④ 在切面类中使用注解配置织入关系

@Component("myAspect")
@Aspect
public class MyAspect {
	@Before("execution(* com.itheima.aop.*.*(..))")
	public void before(){
		System.out.println("前置代码增强.....");
	}
}

⑤ 在配置文件中开启组件扫描和 AOP 的自动代理


<!--组件扫描--> 
<context:component-scan base-package="com.ropz.aop"/>
<!--aop的自动代理--> 
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

⑥ 测试

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml")
public class AopTest { @Autowired
	private TargetInterface target;
	@Test
	public void test1(){
		target.method();
	}
}

注解配置 AOP 详解

通知的配置语法:@通知注解(“切点表达式")

切点表达式的抽取

@Component("myAspect")
@Aspect
public class MyAspect {
    @Before("MyAspect.myPoint()")
    public void before(){
    System.out.println("前置代码增强.....");
    }
    @Pointcut("execution(* com.ropz.aop.*.*(..))")
    public void myPoint(){}
}

知识要点

标签:Spring,void,切点,public,切面,AOP,class
来源: https://www.cnblogs.com/ropz/p/16102619.html