`
tigers20010
  • 浏览: 48610 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

2010-01-26 传智播客—spring (转载)

阅读更多

这知识越学越简单了。其实现在学习的Spring和之前学习的Hibernate等框架等,他们的实现都是我们之前学习的Java基础和JavaWeb基础。再加之做了几个总结性的练习,巩固了基础。所以现在学习起来就比较容易了。

今日的课程内容为两部分:Spring中的AOP面向切面编程和Spring对JDBC的支持。

 

一、Spring-AOP

AOP面向切面编程(Aspect-Oriented Programming),是对传统OOP的补充。AOP使用是使用动态代理实现的。动态代理我们已经非常熟悉了。我也将逐渐的由实现原理转向应用,因为我们在学习JavaWEB基础的时候,原理已经学习过了。

AspectJ是Java社区里最完整最流行的AOP框架,Spring2.X使用的正是这个框架。AspectJ已经被广泛应用,她具有大好前程。

AspectJ支持注解和XML配置。

1.启用AspectJ注解支持

1).AspectJ需要两个Jar包:spring-framework-2.5.6.SEC01\lib\aspectj\目录下“aspectjrt.jar”和“aspectjweaver.jar”。

2).在Bean配置文件中添加“<aop:aspectj-autoproxy/>

2.使用AspectJ注解声明切面

AspectJ 支持 5 种类型的通知注解:

1) @Before: 前置通知, 在方法执行之前执行。

2) @After: 后置通知, 在方法执行之后执行 。

3) @AfterRunning: 返回通知, 在方法返回结果之后执行。

4) @AfterThrowing: 异常通知, 在方法抛出异常之后。

5) @Around: 环绕通知, 围绕着方法执行。

我们来看个简单的例子,算术计算器。

1).定义一个接口:

package cn.itcast.cc.spring.aspectj;

public interface ArithmeticCalculator {

void add(int i, int j);// 无返回值,用于测试

void sub(int i, int j);// 无返回值,用于测试

int mul(int i, int j);

int div(int i, int j);

}

2).实现类:

package cn.itcast.cc.spring.aspectj;

import org.springframework.stereotype.Component;

@Component(value="calc")

public class ArithmeticCalculatorImpl implements ArithmeticCalculator {

@Override

public void add(int i, int j) {

int result = i + j;

System.out.println(result);

}

@Override

public void sub(int i, int j) {

int result = i - j;

System.out.println(result);

}

@Override

public int div(int i, int j) {

int result = i / j;

return result;

}

@Override

public int mul(int i, int j) {

int result = i * j;

return result;

}

}

3).AspectJ切面类:

package cn.itcast.cc.spring.aspectj;

import org.aspectj.lang.*;

import org.aspectj.lang.annotation.*;

import org.springframework.stereotype.Component;

@Aspect // AspectJ切面Bean

@Component // Bean

public class ArithmeticCalculatorAspect {

// 前置通知

@Before(value = "execution (* cn.itcast.cc.spring.aspectj.ArithmeticCalculator.* (..))")

public void beforeMethodLoggin(JoinPoint jp) {

System.out.println("before " + jp.getSignature().getName());

}

// 后置通知

@After(value = "execution (* cn.itcast.cc.spring.aspectj.ArithmeticCalculator.* (..))")

public void afterMethodLoggin(JoinPoint jp) {

System.out.println("after " + jp.getSignature().getName());

}

// 返回通知

@AfterReturning(value = "pointCut()", returning = "result")

public void afterMethodLogginReturn(JoinPoint jp, Object result) {

System.out.println("after " + jp.getSignature().getName() + " return " + result);

}

// 异常通知

@AfterThrowing(value = "pointCut()", throwing = "e")

public void errorMethodLoggin(JoinPoint jp, Throwable e) {

System.out.println("method " + jp.getSignature().getName()

+ " throwing " + e);

}

// 环绕通知,通过它可以实现上面所有的通知。

@Around("execution (* cn.itcast.cc.spring.aspectj.ArithmeticCalculator.* (..))")

public Object aroundMethodLoggin(ProceedingJoinPoint pjp) {

System.out.println("around_before " + pjp.getSignature().getName());

Object result = null;

try {

result = pjp.proceed();

} catch (Throwable e) {

e.printStackTrace();

System.out.println("around_error " + pjp.getSignature().getName());

}

System.out.println("around_after " + pjp.getSignature().getName());

System.out.println("around_after " + pjp.getSignature().getName()

+ " return " + result);

return result;

}

// 重用切入点,其他“通知方法”可以引用此方法名称“pointCut()”。

@Pointcut(value = "execution (* cn.itcast.cc.spring.aspectj.ArithmeticCalculator.* (..))")

public void pointCut() {

}

}

4).Bean配置文件:

<?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"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="cn.itcast.cc.spring.aspectj" />

<aop:aspectj-autoproxy />

</beans>

5).测试类:

package cn.itcast.cc.spring.aspectj;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String[] args) {

ApplicationContext ac = new ClassPathXmlApplicationContext("beans-aspect.xml");

ArithmeticCalculator calc = (ArithmeticCalculator) ac.getBean("calc");

calc.add(1, 2);

// calc.sub(2, 1);

// calc.mul(3, 3);

// calc.div(10, 2);

}

}

上面是较为常用的注解。

2.使用XML文件声明切面

使用XML文件声明切面没有使用注解声明切面直观,简单。

1).删除所有AspectJ注解

2).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:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring

分享到:
评论

相关推荐

    传智播客2016spring资料4

    标题“传智播客2016spring资料4”揭示了这是一份关于Spring框架的教育资料,特别关注的是2016年传智播客教学课程中的第四天内容。传智播客是一家知名的IT教育机构,其课程通常深入浅出,适合初学者和有一定经验的...

    传智播客spring教程源码

    传智播客spring教程全部源码,因为文件太大,所以分开来上传

    传智播客Spring框架资料

    传智播客spring 4天资料。包含课件和代码~

    2017年-传智播客-张志君老师-SpringBoot视频教程

    2017年-传智播客-张志君老师-SpringBoot视频教程 网上找了好久才找到的

    传智播客 spring框架2016版资料

    通过传智播客的Spring框架2016版课程,学习者可以深入理解Spring的基本原理和实践应用,为成为一名合格的Java开发人员奠定坚实的基础。在实际学习过程中,应结合PPT和笔记,逐步掌握每个知识点,并通过实际项目练习...

    传智播客Spring2.5.6学习笔记最新整理

    按照“传智播客Spring2.5.6学习笔记最新整理”的指引,我们需从官方下载页面http://www.springsource.org/download下载Spring框架,随后解压缩并定位到关键的JAR文件。这些JAR文件包括: - `dist\spring.jar`:核心...

    传智播客spring ppt

    这个"传智播客spring ppt"很可能是针对初学者或进阶者设计的一系列课程材料,旨在帮助学习者深入理解并掌握Spring框架的各个方面。 在Spring框架中,最重要的概念之一是依赖注入。依赖注入允许开发者将对象之间的...

    传智播客Spring视频里所用的jar包

    标题“传智播客Spring视频里所用的jar包”和描述中提到的内容涉及了Java Web开发中的几个关键框架和技术,主要包括Spring、Hibernate、Struts以及JPA。这些框架是构建企业级应用的重要组成部分,它们各自承担着不同...

    传智播客Spring教程源代码截取

    这个"传智播客Spring教程源代码截取"包含了两个文件,"springѧϰ"和"spring学习",很可能是两个不同阶段的学习资料或者不同主题的示例代码。 1. **Spring IoC**:IoC是Spring的核心,它将对象的创建和管理权交给了...

    传智播客 spring2.5源代码_lib包

    这个"传智播客 spring2.5源代码_lib包"包含了Spring框架2.5版本的库文件,这些库文件对于理解Spring的工作原理、学习如何使用它以及进行相关开发非常有帮助。下面我们将深入探讨Spring 2.5的一些核心概念和功能。 1...

    传智播客Spring众多实例源码

    学习spring的好的例子。itcast 从购买的视屏里的源码

    传智播客Spring MVC课程源码

    这个"传智播客Spring MVC课程源码"可能包含了从基础到高级的Spring MVC开发实例,对于学习和理解Spring MVC的工作原理及其在实际项目中的应用非常有帮助。下面将详细阐述Spring MVC的相关知识点。 1. **Spring MVC...

    传智播客 spring ppt

    Spring 框架是Java开发中的一个重要组成部分,它是一个开源的控制反转(Inversion of Control,IoC)和面向切面(Aspect Oriented Programming,AOP)的容器框架。Spring的主要目标是简化企业级应用程序的开发,通过...

    传智播客JAVA全套种子共20G

    《2010传智播客struts2.1.8视频教程》1.09G 《EJB3.0视频教程》180M 《JDBC视频教程》664M 《jpa详解视频教程》165M 《spring2.5视频教程》365M 《传智播客_AJAX视频教程》1.27G 《传智播客_FTP视频教程》117M ...

    传智播客内部培训ppt——spring

    传智播客培训机构的内部培训spring的ppt。很值得收藏学习。

    传智播客-spring-PPT-黎活明-经典.ppt

    传智播客-spring-PPT-黎活明-经典.ppt

Global site tag (gtag.js) - Google Analytics