`

java工程下测试spring的Ioc和切面

阅读更多
public class MyAspect {	
	public void beforeAdvice(JoinPoint jp){
		//调用目标对象时,所传递的调用参数,都会在advice中被JoinPoint所拦截
		System.out.println("执行之前。。");
		Object[] args = jp.getArgs();
		if(args!=null){
			for(Object obj : args){
				System.out.println(obj);
			}
		}
		System.out.println("执行之前结束。。。");
	}
	public void afterAdvice(){
		System.out.println("执行之后。。");
	}
	public void afterReturningAdvice(){
		System.out.println("执行之后(返回值)..");
	}
	
	public void afterThrowingAdvice(){
		System.out.println("执行时抛异常。。");
	}
	
	//环绕通知(interceptor)
	public Object doRoundIntercept(ProceedingJoinPoint pjp)throws Throwable{
		
		System.out.println("环绕开始。。");
		Object result = null;
		try {
			result = pjp.proceed();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("环绕结束。。");
		return result;
	}
}

 

public class LoginDAO {

	public boolean validate(String username,String password){
		System.out.println("执行了 LoginDAO...validate()");
//		if(true){
//			throw new RuntimeException("我爱异常。。");
//		}
		return true;
	}
}

 

public class SpringAOPTest {

	private static ClassPathXmlApplicationContext ctx;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		ctx = new ClassPathXmlApplicationContext("beans.xml");
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		if(ctx!=null){
			ctx.close();
		}
	}

	@Test
	public void testAOP(){
		LoginDAO loginDAO = (LoginDAO)ctx.getBean("loginDAO");
		loginDAO.validate("aaa", "111");
	}
}

 

<?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: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/aop
	http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
	">
	
	<!-- 把LoginDAO纳入spring IoC容器管理 -->
	<bean id="loginDAO" class="com.dao.LoginDAO"/>
	
	<!-- 定义一个切面(aspect) -->
	<bean id="myAspect" class="com.aspect.MyAspect"/>
	
	
	<!--  把切面(里面的通知)织入到目标对象-->
	
	<aop:config >
		<aop:aspect id="asp" ref="myAspect">
			<!-- 定义一个切入点(告诉切面asp,应该把里面的通知织入到哪个类中哪个方法中) -->
			<aop:pointcut id="myPointcut" expression="execution (* com.mypack.dao..*.*(..))"/>
			
			<aop:after method="afterAdvice" pointcut-ref="myPointcut"/>
			<aop:after-returning method="afterReturningAdvice" pointcut-ref="myPointcut"/>
			<aop:after-throwing method="afterThrowingAdvice" pointcut-ref="myPointcut"/>
			<aop:before method="beforeAdvice" pointcut-ref="myPointcut"/>
			<aop:around method="doRoundIntercept" pointcut-ref="myPointcut"/>
		</aop:aspect>
	</aop:config>
</beans>

 

分享到:
评论

相关推荐

    Java反射_Spring IOC

    Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    springioc和spring aop

    Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...

    java模拟spring ioc

    这篇博客“java模拟spring ioc”很可能是探讨如何在没有Spring框架的情况下,使用纯Java代码来实现类似Spring的IOC功能。以下将详细介绍Spring的IOC和DI概念以及如何模拟这些概念。 **依赖注入(Dependency ...

    Spring IoC依赖包

    - **AOP(面向切面编程)**: 结合IoC,Spring提供了基于代理的AOP实现,可以方便地进行跨切面的代码编写,如日志记录、事务管理等。 - **数据访问集成**: Spring提供了对各种数据库访问技术的支持,如JDBC、...

    模拟spring ioc过程

    通过实践,你可以深入了解Spring如何管理对象的生命周期,如何通过依赖注入来降低耦合,以及如何利用面向切面编程来实现代码的模块化和解耦。这些技能对于任何Java开发者来说都是至关重要的,尤其是在大型企业级应用...

    SpringIOC和AOP实现机制模拟

    Spring框架是Java开发中不可或缺的一部分,它通过提供控制反转(IOC)和面向切面编程(AOP)等核心特性,极大地简化了企业级应用的构建。让我们深入探讨这两个概念及其在Spring中的实现机制。 首先,Spring的控制...

    Java进阶之SpringIoC源码深度剖析共19页.pd

    此外,还可能涉及如何使用XML配置、Java配置或注解来声明和管理bean,以及如何实现自定义的bean后处理器和AOP切面。 在压缩包的【子文件名称列表】中提到了"赚钱项目",但这个文件名与主题"Java进阶之SpringIoC"并...

    Java进阶之SpringIoC应用共18页.pdf.zi

    5. **AOP(面向切面编程)**:讲解如何使用Spring的AOP特性来实现横切关注点,如日志、事务管理等。 6. **Bean的作用域**:分析Singleton、Prototype、Request、Session等多种作用域,以及它们在不同场景下的选择。...

    spring ioc

    此外,通过 AOP(面向切面编程)和 Spring 的其他模块,如数据访问、事务管理、MVC 等,我们可以构建出完整的、松散耦合的应用。 标签 "源码" 暗示我们将深入 Spring 框架的内部,了解 IOC 容器的工作原理。Spring ...

    Spring IoC讲解PPT

    它旨在简化企业级应用开发,通过依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的理念,提供了大量的功能模块,包括数据访问、事务管理、Web 开发以及一系列的工具支持。...

    spring ioc思维导图源文件

    AOP(面向切面编程)**:Spring的另一个核心特性,与IOC紧密相关,可以用来实现日志、事务、权限控制等功能,通过定义切面、通知和切入点表达式实现代码的解耦。 以上只是Spring IOC的一部分知识点,实际上还包括...

    Spring IOC.pdf

    IOC和AOP(面向切面编程)都是Spring框架中的核心概念。AOP是一种编程范式,它允许开发者通过预定义的方式将横切关注点(如日志记录、安全检查、事务管理等)从业务逻辑代码中分离出来,以达到业务逻辑与系统服务...

    Java Spring代理模式AOP-IOC分析

    AspectJ库提供了一种注解方式来定义切面(aspect),并且可以使用Spring的IOC容器来管理切面。在Spring中,可以使用XML配置文件或注解方式来定义切面,并将其应用到目标对象上。 七、使用IOC配置方式实现AOP 在...

    springioc的详细讲解

    6. **AOP(面向切面编程)集成**:Spring的IOC容器与AOP模块紧密集成,可以方便地实现切面编程,提供声明式事务管理等功能。 7. **资源加载**:Spring容器可以从不同的来源加载Bean定义,如XML文件、Java配置类、@...

    Spring IOC和Spring AOP_spring aop_springIOC

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性包括依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)。这两个概念是Spring框架的基石,极大地简化了...

    Spring-IOC实现

    - Spring提供了测试支持,如@Test注解的JUnit测试和@SpringBootTest注解的Spring Boot测试,方便进行集成测试和单元测试,确保IOC容器内的Bean正确工作。 以上就是Spring-IOC的基本实现和相关知识点,包括注解和...

    实验四_SpringIoC.rar

    此外,Spring的AOP(面向切面编程)特性也常与IoC结合使用,提供事务管理、日志记录等跨切面的功能。 总之,通过这个实验,你将深入理解Spring IoC的工作原理,掌握如何配置和使用Bean,以及如何处理Bean间的依赖...

Global site tag (gtag.js) - Google Analytics