我在尝试使 eclipse 和 aspectj 用于动态 Web 项目时遇到问题。我正在寻找编译时编织,以便可以使用 Eclipse 可视化功能。
我已按照此处给出的步骤进行操作:
https://forums.oracle.com/forums/thread.jspa?messageID=8591748
将 Eclipse Indigo (3.7) 与最新的 Aspectj eclipse 插件 (2.1.3) 一起使用。
步骤如下:
[1] 创建基本的servlet
//imports omitted
public class MyServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
PrintWriter out= null;
try {
out = response.getWriter();
out.write("hello from MyServlet");
} catch (IOException e) {
e.printStackTrace();
} finally {
if(out!=null)
out.close();
}
}
}
[2] 将servlet添加到部署描述符(web.xml)
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myCompany.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet/*</url-pattern>
</servlet-mapping>
</web-app>
[3] 创建方面
package com.myCompany;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public aspect MyServletAspect {
pointcut doGet() :
execution(public void MyServlet.doGet(HttpServletRequest,HttpServletResponse));
after() returning : doGet() {
System.out.println("Hello from doGet (via aspectj)");
}
}
但是,当我运行这个没有骰子时 - 方面只是不运行(servlet 写入响应,方面写入控制台)。我为常规的 java 项目做了类似的事情,效果很好。
我注意到有将 aop.xml 添加到 Web 应用程序的 META-INF 目录的指南,但这对我不起作用。
我们的目标是通过 eclipse 在非 Spring 框架(或 Maven)项目的开发中非侵入性地运行 aspectj - 这应该很容易......但我无法让它工作。
任何关于 Eclipse 中 Web 应用程序的编译时编织教程的建议/参考都会很有用。应用服务器是嵌入式 Tomcat 6(但如果需要,可以升级到 Tomcat 7)。
在运行时调整开发环境而不影响生产代码的能力会很棒——如果它可以工作的话。响应非常感谢。