AspectJ+Spring编程(原创)

好多网上的文章说到Spring Aop的时候,都描叙的是一个方法。就是利用Spring提供的动态代理接口来实现切面编程。貌似要在spring上用到Aop就非用到Spring的动态代理接口了。Spring 真幸福,有这么多人为他的动态代理打广告。其实Aop是一个独立的技术,他在Spring可以实现,在他外面也可以实现,在其他任何地方都可以实现。Spring提供的动态代理只是其中的一种选择。我更加偏向于用下面我要介绍的独立于Spring外的aop技术,那样更加灵活,扩展性,兼容性也更好。熟悉Eclipse的人应该都知道Eclipse里面有一个插件:Aspectj。这个插件能够方便你创建和编译Aspectj的代码。我们正是要把这个功能和我们的Spring框架结合起来。

首先我们从搭建一个简单的Spring mvc的框架开始,然后再在这个框架中做切面编程。这个简单框架的流程是:home-servlet->HelloC->helloV

下面我简要描述一这个mvc流程的搭建过程。

1、创建项目:创建一个dynamic web project,名字就叫TestWeb吧。
2、在web.xml中加载Spring Listener 和 home-servlet.
   <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>home</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/home/*</url-pattern>
</servlet-mapping>

3、创建home-servlet.xml, 代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans
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"
xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<context:component-scan base-package="web"/>
</beans>

4、创建web.HelloC类,代码:
package web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestC {
@RequestMapping("/hello")
public String helloHandler(Model model) {
return "hello";
}


}

5、创建hello.jsp,这个随便你用什么代码,只要是jsp文件就行,放在正确的路径上,这里是放在/WEB-INF/views下面。

你测试一下,你的流程应该可以运作了。

6、现在在这个流程上加入Aop代码。我们要在web.HelloC.helloHandler上加入增强。在此之前,你要把你的项目转换支持Aspectj。右键单击项目选择Aspectj Tools->Convert to Aspectj Project.

7、现在为切面书写代码,建立一个Aop.TestAspect类。代码为:
package aop;

public aspect TestAspect {
pointcut hello():execution(* web.TestC.helloHandler(..));
before():hello(){
System.out.println("Before say hello!!!");
}
}

8、现在再运行你的项目,你发现,每次你访问/TestWeb/home/hello的时候,你的console中都有“Before say hello!!!”的输出。因为我们在home-servlet->HelloC->helloV这个流程中的HelloC中的helloHandler函数前加入了一个增强,他就是7中的简单的几行代码。下面你要做的事,就是熟悉Aspectj的语法。这种项目不仅仅能在Spring环境中Aop,也能在任何一个java项目中Aop。你要做的就是:
右键单击项目选择Aspectj Tools->Convert to Aspectj Project.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值