spring用过,但是没有系统的学习过,最近工作不是很忙,所以找了本书(SPRING实战)学习下,然后在这里也算做个笔记吧。
一直都知道spring有两大宝:IOC和AOP。AOP在曾经做的项目中没有用到,所以一直不甚明白。这次机会让我可以一点点打开其神秘面纱
下面开始介绍我的小程序了:
定义Performer接口:
package com.study.spring.aop;
public interface Performer {
public void perform();
}
定义一个Performer的实现类Juggler:
package com.study.spring.aop;
public class Juggler implements Performer {
private int bagBeans = 3;
public Juggler() {}
public Juggler(int bagBeans) {
this.bagBeans = bagBeans;
}
public void perform() {
System.out.println("perform" + bagBeans);
}
}
定义切面类
package com.study.spring.aop;
public class Audience {
public void takeSeats() {
System.out.println("The audience is taking their seats");
}
public void turnOffCellphones() {
System.out.println("The audience is turning off their cellphones");
}
public void applaud() {
System.out.println("CLAP CLAP CLAP CLAP CLAP CLAP ");
}
public void demandRefund() {
System.out.println("Boo! We want our money back");
}
}
spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"
xmlns:aop="http://www.springframework.org/schema/aop">
<bean id="juggler" class="com.study.spring.aop.Juggler">
<constructor-arg value="15" />
</bean>
<bean id="audience" class="com.study.spring.aop.Audience" />
<aop:config>
<aop:aspect ref="audience">
<aop:pointcut id="performance"
expression="execution(* com.study.spring.aop.Performer.perform(..))" />
<aop:before pointcut-ref="performance" method="takeSeats" />
<aop:before pointcut-ref="performance" method="turnOffCellphones" />
<aop:after-returning pointcut-ref="performance"
method="applaud" />
<aop:after-throwing pointcut-ref="performance"
method="demandRefund" />
</aop:aspect>
</aop:config>
</beans>
定义测试类:
package com.study.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.study.spring.aop.Performer;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ctx = null;
ctx = new ClassPathXmlApplicationContext("com/study/spring/spring.xml");
Performer performer = (Performer) ctx.getBean("juggler");
performer.perform();
}
}
执行结果:
The audience is taking their seats
The audience is turning off their cellphones
perform15
CLAP CLAP CLAP CLAP CLAP CLAP
分享到:
相关推荐
本例子中的"JavaInjectApp"可能是一个使用了AspectJX库的应用程序实例,展示了如何在Android项目中自定义AOP规则。通常,实现过程包括以下步骤: 1. **配置依赖**:在项目的build.gradle文件中添加AspectJX的依赖,...
1. **定义特性(Attribute)**:创建一个自定义特性,用于标记那些可能抛出异常的方法。例如,可以创建一个名为`[HandleException]`的特性,将其应用于可能抛出异常的方法上。 ```csharp [AttributeUsage...
在Unity游戏开发中,AOP可以用于日志记录、性能监控、事务管理等多个场景,极大地提高了代码的可维护性和灵活性。 在Vs2019中编写C# Unity AOP应用,首先我们需要了解几个关键概念: 1. **切面(Aspect)**:切面...
// 第一次调用 login.login(); // 第二次调用 login.login(); // 第三次调用 ``` 5. **配置文件**: ```xml <bean id="advice" class="org.nitpro.aop.before.LoginBeforeAdvice" /> ...
5. **单例模式(Singleton)**:Spring AOP中的`SingletonTargetSource`保证了每个目标对象只被创建一次,实现了单例模式,确保在整个应用程序中只有一个共享的实例存在,提高了资源利用效率。 6. **适配器模式...
第1 届是2002 年4 月在荷兰Enschede 召开,第2 届是 2003 年3 月在美国波士顿召开,第3 届是2004 年3 月在英国Lancaster 召开,第4 届将于 2005 年3 月在美国芝加哥召开。前三届的与会者包括美国、加拿大、荷兰、...
在完成你的“Spring框架开发的第一个实例”时,确保安装了JDK和Maven(或Gradle)等必要工具,并在项目中添加Spring的相关依赖。创建并配置好`pom.xml`(或`build.gradle`)文件,然后按照上述步骤编写代码,运行...
这个"第一个SSH手动整合程序"是一个实用的教程,旨在帮助开发者了解如何将这三个框架集成到一个应用中,实现MVC(Model-View-Controller)架构的高效应用开发。 Spring框架是核心的依赖注入(Dependency Injection...
但有时我们可能希望某些bean在真正需要时才被实例化,这时可以将`lazy-init`设为`true`,这样bean将在第一次通过`getBean`方法请求时才被创建。 AOP的配置通常分为两种方式:一种是基于XML的声明式配置,另一种是...
AOP是一种编程范式,它允许程序员定义"切面",这些切面封装了跨越多个对象的横切关注点,如日志、事务管理等。以下是一些关键知识点的详细说明: 1. **@AspectJ 注解驱动**: - `@Aspect`注解用于声明一个类作为切...
第一部分1-10章节可能涵盖了基础概念、环境配置、JSP和Servlet的入门示例,以及简单的数据库操作。而第二部分11-21章节则可能涉及更复杂的主题,如框架的使用、企业级应用的设计和部署等。 总之,《Java Web程序...
AspectJ是该团队研发的一个重要成果,其第一个版本在1998年发布,正式的1.0版本则是在2001年发布的。 #### AOP的基本概念 1. **关注点(Concern)**:是指软件开发中重要的、可管理的部分,通常与特定的功能或目标...
首先,了解IoC(控制反转)是理解Spring框架的第一步。IoC是一种设计模式,它将对象的创建和依赖关系的管理从程序代码中移出,转交给外部的IoC容器来管理。在Spring中,IoC容器负责创建对象,并且管理和注入对象之间...
这个“一个简单的SSH框架程序”很显然是一个基于这些技术构建的应用实例,用于帮助开发者理解并学习如何整合这三种框架。接下来,我们将深入探讨SSH框架以及与其相关的技术。 **Struts2框架**: Struts2是MVC...
3. **创建代理类**:接下来,为了实现AOP,我们创建了一个代理类`HelloProxy`,它同样实现了`IHello`接口,并且内部持有一个`IHello`类型的实例。 ```java public class HelloProxy implements IHello { private...
总的来说,"Struts整合Spring开发实例(三)"可能涵盖了Spring和Struts的深度集成,包括Action的Spring管理、依赖注入、AOP应用以及事务管理等方面。这不仅增强了应用的功能,也提高了代码的可维护性和可测试性。在...
《Java信息系统设计与开发实例(第二版)》是一本深入探讨如何使用Java技术进行信息管理系统设计与开发的专业书籍。本书以实战案例为导向,为读者提供了一个全面了解和掌握Java在MIS(Management Information System...
《Java信息系统设计与开发实例(第二版)》是一本深入探讨如何使用Java技术进行信息系统设计与开发的专业书籍。这本书不仅提供了理论知识,还包含了丰富的实战案例,帮助读者将理论与实践相结合,提升在Java开发中的...
第13章可能专注于一个具体的开发实例,将上述知识点综合运用,指导读者完成一个完整的Java Web项目。 总的来说,Spring、Struts和Hibernate的组合为Java Web开发提供了一套强大且灵活的解决方案,帮助开发者构建...
通过eval函数可以将原函数的代码字符串化,并用数组的方式访问第一个元素来获取函数的副本。 8. 函数参数的传递: 在新的函数中,通过arguments对象来接收传入的参数,保证了在函数织入过程中,原有函数的参数不会...