Spring通过xml配置实现Aop以及注解实现Aop配置

一:Spring为我们提供了建立代理对象的方法,我们每次获得的对象其实都是代理对象,我们通过aop来给目标对象增加一些功能或者方法
JDK模式:jdk方法是指spring要注解的类,目标实现接口spring自动使用jdk方法来创建
创建方式:引入包
创建约束,增加aop的xsln
目标对象–配置对象,
applicationContext.xml配置
配置bean,目标对象,aop对象

<!-- 配置目标对象 -->
<bean name="myUserservice" class="cn.oracle.services.UserServicesImpl"></bean>
 <!-- 配置 aop-->
 
 <bean name="myadvice" class="cn.oracle.services.Advices"></bean>
<aop:config>
 <!-- 1.配置切入点
 切入点表达式:*是该包下的所有类文件 public 可以省略,void是返回类型,带不带参可以用泛型*代替
 public void cn.oracle.services.*serviceImpl.*(..)两个点是带参或者不带参的泛型,id唯一,用来绑定执行切面 -->
 <aop:pointcut expression="execution (* cn.oracle.services.*.*(..))" id="myPoint"/>
 <!-- 加入aop对象,链接目标对象 -->
 <aop:aspect ref="myadvice">
 <!-- 指定执行方法之前和之后的具体方法 -->
 <aop:before method="beginUser" pointcut-ref="myPoint"/>
  <aop:after method="afterUser" pointcut-ref="myPoint"/>
 </aop:aspect>
 </aop:config>
 

目标对象:
/**

  • 目标对象,实现接口,自动用jdk

*/

public class UserServicesImpl implements UserServices {

	@Override
	public void saveUser() {
		System.out.println("执行存储");
		
	}

	@Override
	public void deleteUser(int id) {
		System.out.println("执行删除");
		
	}

	@Override
	public void updateUser(User user) {
		System.out.println("执行修改");	
	}

aop类
package cn.oracle.services;

import cn.oracle.pojo.User;
//aop

public class Advices  {

	
	public void beginUser() {
		System.out.println("保存开始了");
		
	}

	
	public void afterUser() {
		System.out.println("保存完成了");
		
	}

测试一下:


import static org.junit.Assert.*;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.oracle.pojo.User;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:cn/oracle/services/applicationContext.xml")
public class Zhujieceshi {
@Resource(name="myUserservice")
UserServices use;
//@Resource(name="ProductService")
//ProductserviceImpl prose;
	@Test
	public void test() {
		System.out.println(use.getClass().getName());
		use.saveUser();
		
	}

}

运行结果
如果我们换个不实现接口的类来测试就是用的glib方法
注意的是:aop不能实现接口,不然报错。
glib方式实现注解
二:注解方式实现aop:

package cn.oracle.pojo;
import org.springframework.stereotype.Component;
import cn.oracle.pojo.User;
/**
 * 目标类
 */
@Component("userservices")
public class UserServicesImpl implements UserServices {
	@Override
	public void saveUser() {
		System.out.println("执行存储");
		
	}
``package cn.oracle.pojo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//注解类
import cn.oracle.pojo.User;
@Component//不指定名字默认给一个别名
@Aspect //指定为切面类
public class Advices  {
//前置通知
	@Before("execution(* cn.oracle.pojo.*.*(..))")
	public void begin() {
		System.out.println("开始事务");
		
	}
//后置通知
	@AfterReturning(value="execution(* cn.oracle.pojo.*.*(..))",returning="obj")
	public void after(JoinPoint joinPoint,Object obj) {
		System.out.println("执行完成了");
		
		
	}
xml配置

```bash
<!-- 测试注解的代理对象-->
<!-- 扫描注解 -->
<context:component-scan base-package="cn.oracle.pojo"/>
<!-- 开启使用注解完成织入 -->

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

测试(注解实现aop)
在这里插入图片描述
测试完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值