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开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...
Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...
Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...
在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...
这篇博客“java模拟spring ioc”很可能是探讨如何在没有Spring框架的情况下,使用纯Java代码来实现类似Spring的IOC功能。以下将详细介绍Spring的IOC和DI概念以及如何模拟这些概念。 **依赖注入(Dependency ...
- **AOP(面向切面编程)**: 结合IoC,Spring提供了基于代理的AOP实现,可以方便地进行跨切面的代码编写,如日志记录、事务管理等。 - **数据访问集成**: Spring提供了对各种数据库访问技术的支持,如JDBC、...
通过实践,你可以深入了解Spring如何管理对象的生命周期,如何通过依赖注入来降低耦合,以及如何利用面向切面编程来实现代码的模块化和解耦。这些技能对于任何Java开发者来说都是至关重要的,尤其是在大型企业级应用...
Spring框架是Java开发中不可或缺的一部分,它通过提供控制反转(IOC)和面向切面编程(AOP)等核心特性,极大地简化了企业级应用的构建。让我们深入探讨这两个概念及其在Spring中的实现机制。 首先,Spring的控制...
此外,还可能涉及如何使用XML配置、Java配置或注解来声明和管理bean,以及如何实现自定义的bean后处理器和AOP切面。 在压缩包的【子文件名称列表】中提到了"赚钱项目",但这个文件名与主题"Java进阶之SpringIoC"并...
5. **AOP(面向切面编程)**:讲解如何使用Spring的AOP特性来实现横切关注点,如日志、事务管理等。 6. **Bean的作用域**:分析Singleton、Prototype、Request、Session等多种作用域,以及它们在不同场景下的选择。...
此外,通过 AOP(面向切面编程)和 Spring 的其他模块,如数据访问、事务管理、MVC 等,我们可以构建出完整的、松散耦合的应用。 标签 "源码" 暗示我们将深入 Spring 框架的内部,了解 IOC 容器的工作原理。Spring ...
它旨在简化企业级应用开发,通过依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的理念,提供了大量的功能模块,包括数据访问、事务管理、Web 开发以及一系列的工具支持。...
AOP(面向切面编程)**:Spring的另一个核心特性,与IOC紧密相关,可以用来实现日志、事务、权限控制等功能,通过定义切面、通知和切入点表达式实现代码的解耦。 以上只是Spring IOC的一部分知识点,实际上还包括...
IOC和AOP(面向切面编程)都是Spring框架中的核心概念。AOP是一种编程范式,它允许开发者通过预定义的方式将横切关注点(如日志记录、安全检查、事务管理等)从业务逻辑代码中分离出来,以达到业务逻辑与系统服务...
AspectJ库提供了一种注解方式来定义切面(aspect),并且可以使用Spring的IOC容器来管理切面。在Spring中,可以使用XML配置文件或注解方式来定义切面,并将其应用到目标对象上。 七、使用IOC配置方式实现AOP 在...
6. **AOP(面向切面编程)集成**:Spring的IOC容器与AOP模块紧密集成,可以方便地实现切面编程,提供声明式事务管理等功能。 7. **资源加载**:Spring容器可以从不同的来源加载Bean定义,如XML文件、Java配置类、@...
Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性包括依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)。这两个概念是Spring框架的基石,极大地简化了...
- Spring提供了测试支持,如@Test注解的JUnit测试和@SpringBootTest注解的Spring Boot测试,方便进行集成测试和单元测试,确保IOC容器内的Bean正确工作。 以上就是Spring-IOC的基本实现和相关知识点,包括注解和...
此外,Spring的AOP(面向切面编程)特性也常与IoC结合使用,提供事务管理、日志记录等跨切面的功能。 总之,通过这个实验,你将深入理解Spring IoC的工作原理,掌握如何配置和使用Bean,以及如何处理Bean间的依赖...