Spring_6_使用注解的方式实现AOP

1)PersonService 接口类:

public interface PersonService {
	public void save(String naem);
	public void update(String name,Integer id);
	public String getPersonName(Integer id);
}

2)PersonServiceBean 实现类:

@Service
// 使用自动扫描的方式自动装配
public class PersonServiceBean implements PersonService {

	@Override
	public void save(String naem) {
		// throw new RuntimeException("异常");
		System.out.println("调用save()方法");
	}

	@Override
	public void update(String name, Integer id) {
		System.out.println("调用update()方法");
	}

	@Override
	public String getPersonName(Integer id) {
		System.out.println("调用getPersonName()方法");
		return "xoxo";
	}
}

3)MyIntercerptor拦截器类:

/**
 * 切面
 */

@Aspect
//标志为切面
@Component
// 使用自动扫描的方式自动装配
public class MyInterceptor {
	// springDaoBean.PersonServiceBean为要拦截的类,
	// .*(..)表示拦截类中的所有方法
@Pointcut("execution(* springDaoBean.PersonServiceBean.*(..))")
	private void anyMethod() {// 声明一个切入点
	}

	// 前置通知的设定及参数的设置和获取
	@Before("anyMethod() && args(name)")
	public void doAccessCheck(String name) {
		System.out.println("前置通知:" + name);
	}

	// 后置通知的设定及参数的设置和获取
	@AfterReturning(pointcut = "anyMethod()", returning = "result")
	public void doAfterReturning(String result) {
		System.out.println("后置通知:" + result);
	}

	@After("anyMethod()")
	public void doAfter() {
		System.out.println("最后通知");
	}

	// 例外置通知的设定及参数的设置和获取
	@AfterThrowing(pointcut = "anyMethod()", throwing = "e")
	public void doAfterThrowing(RuntimeException e) {
		System.out.println("例外通知:" + e);
	}

	// 环绕通知的设定
	@Around("anyMethod()")
	public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
		System.out.println("进入方法");
		Object result = pjp.proceed();
		System.out.println("退出方法");
		return result;
	}
}

4)XML文件的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

	<!-- 添加的自动扫描组件 -->
	<context:component-scan base-package="springDaoBean" />

	<!-- 添加拦截器 -->
	<aop:aspectj-autoproxy />

	<!-- 使用注解的方式注入 -->
	<!--
<bean id="personServiceBean"
class="springDaoBean.PersonServiceBean" />
 	 -->
	<!--
<bean id="myInterceptor"
class="springDaoBean.MyInterceptor" />
-->
</beans>

5)springAopTest 测试类:

public class springAopTest {
	@Test
	public void instanceSpring() {

		AbstractApplicationContext ctx = new
  ClassPathXmlApplicationContext("springXml/beans.xml");

		PersonService personServiceBean = (PersonService)
ctx.getBean("personServiceBean");
		// 前置通知测试及参数的打印
		personServiceBean.save("oooo");
		//后置通知的测试及参数的打印
		personServiceBean.getPersonName(0);
	}
}

Spring_6_使用注解的方式实现AOP

时间: 2024-09-20 22:57:39

Spring_6_使用注解的方式实现AOP的相关文章

使用Spring的注解方式实现AOP的细节

前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Spring的注解方式实现AOP的一些细节.本文是建立在使用Spring的注解方式实现AOP入门的案例的基础之上的. 本文是来讲解使用Spring的注解方式实现AOP的一些细节,其实说白了就是学习如何使用各种通知而已,例如前置通知.后置通知.异常通知.最终通知.环绕通知等,之前我们已经学习了前置通知,现在就来学习剩余的通知. 我们先来看后置通知,此时须将MyInterceptor类的代码修改为: /** * 切面 * @

使用Spring的注解方式实现AOP入门

首先在Eclipse中新建一个普通的Java Project,名称为springAOP.为了使用Spring的注解方式进行面向切面编程,需要在springAOP项目中加入与AOP相关的jar包,spring aop需要额外的jar包有: com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aop-4.2.5.RELEASE.jar sprin

spring中aop的注解实现方式简单实例

上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们主要分为如下几个步骤(自己整理的,有更好的方法的话,欢迎交流[email protected]): 1.在切面类(为切点服务的类)前用@Aspect注释修饰,声明为一个切面类. 2.用@Pointcut注释声明一个切点,目的是为了告诉切面,谁是它的服务对象.(此注释修饰的方法的方法体为空,不需要写功能比如 public void say(){};

Spring4学习笔记-AOP(基于注解的方式)

1.加入jar包 com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar commons-logging-1.1.3.jar spring-aop-4.1.0.RELEASE.jar spring-aspects-4.1.0.RELEASE.jar spring-beans-4.1.0.RELEASE.jar spring-context-4.1.0.RELE

Spring源码窥探之:注解方式的AOP原理

AOP入口代码分析 通过注解的方式来实现AOP1. @EnableAspectJAutoProxy通过@Import注解向容器中注入了AspectJAutoProxyRegistrar这个类,而它在容器中的名字是org.springframework.aop.config.internalAutoProxyCreator.2. AspectJAutoProxyRegistrar实现了ImportBeanDefinitionRegistrar接口,所以可以向容器中注册Bean的定义信息.3. 通过

一起学Spring之注解和Schema方式实现AOP

概述 在上一篇,我们了解了通过实现接口和XML配置的方式来实现AOP,在实现注解方式AOP之前,先了解一下AspectJ.AspectJ是一个面向切面的框架,它扩展了Java语言,定义了AOP语法,能够在编译时实现代码的注入.Spring通过集成ApsectJ实现了以注解方式定义通知类,大大减少了配置文件的工作量.本文主要讲解通过注解方式和Schema方式实现AOP编程,仅供学习分享使用,如有不足之处,还请指正. 实现AOP的三种方式: 通过实现相应接口,并配置Xml进行实现,可以参考上一篇.

使用注解方式实现 AOP和IoC

使用注解方式实现AOP和IoC IOC和DI的注解 IOC: @Component:实现Bean组件的定义 @Repository:用于标注DAO类,功能与@Component作用相当 @Service:用于标注业务类 @Controller:用于标注控制器 DI: @Resource(name="userService") 默认ByName方式,如果name确实默认按照ByType方式注入 @Autowired 默认ByType方式,如果出现同名类,则不能按照Type进行注入 需要使

SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)

首先我们为什么需要做日志管理,在现实的上线中我们经常会遇到系统出现异常或者问题.这个时候就马上打开CRT或者SSH连上服务器拿日子来分析.受网络的各种限制.于是我们就想为什么不能直接在管理后台查看报错的信息呢.于是日志管理就出现了. 其次个人觉得做日志管理最好的是Aop,有的人也喜欢用拦截器.都可以,在此我重点介绍我的实现方式. Aop有的人说拦截不到Controller.有的人说想拦AnnotationMethodHandlerAdapter截到Controller必须得拦截org.sprin

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.