Wildfly 14.0集成AspectJ无日志输出问题求助
问题:WildFly 14.0中AspectJ切面日志不输出
我在基础HelloWorld Servlet项目中尝试使用AspectJ,部署到WildFly 14.0后,控制台看不到MyAspect类的日志输出,不确定是代码还是WildFly配置需要调整。相关代码和项目结构如下:
MyAspect类
@Aspect public class MyAspect { static Logger logger = Logger.getLogger("MyAspect"); @Before("execution(* org.jboss.as.quickstarts.helloworld.HelloService.*(..))") public void testModeOnlyMethods() { logger.info("AspectLog"); } }
HelloWorldServlet类
public class HelloWorldServlet extends HttpServlet { static String PAGE_HEADER = "<html><head><title>helloworld</title></head><body>"; static String PAGE_FOOTER = "</body></html>"; @Inject HelloService helloService; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter writer = resp.getWriter(); writer.println(PAGE_HEADER); writer.println("<h1>" + helloService.createHelloMessage("World") + "</h1>"); writer.println(PAGE_FOOTER); writer.close(); } }
HelloService类
public class HelloService { static Logger logger = Logger.getLogger("HelloService"); String createHelloMessage(String name) { logger.info("Aspect"); return "Hello " + name + "!"; } }
项目结构
├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── jboss/ │ │ │ └── as/ │ │ │ └── quickstarts/ │ │ │ └── helloworld/ │ │ │ ├── HelloWorldServlet.java │ │ │ ├── HelloService.java │ │ │ └── MyAspect.java │ │ └── webapp/ │ │ └── WEB-INF/ │ │ └── web.xml └── pom.xml
解决步骤
要让AspectJ在WildFly 14.0中生效,需从代码配置、依赖管理和容器配置三方面调整:
1. 代码调整
- 给
MyAspect添加CDI注解(如@Named),让容器管理切面类:
@Aspect @Named public class MyAspect { // 原有代码不变 }
- 修改
HelloService的createHelloMessage方法为public修饰符,AspectJ默认对非public方法的拦截支持有限:
public String createHelloMessage(String name) { // 原有代码不变 }
2. 依赖配置
在pom.xml中添加AspectJ核心依赖:
<dependencies> <!-- 其他依赖 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.6</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> </dependency> </dependencies>
3. WildFly容器配置
- 开启AspectJ模块全局可见:编辑
WILDFLY_HOME/standalone/configuration/standalone.xml,找到<subsystem xmlns="urn:jboss:domain:ee:4.0">节点,添加:
<global-modules> <module name="org.aspectj.aspectjrt" slot="main"/> </global-modules>
- 若WildFly中无AspectJ模块,需手动创建:
- 创建目录
WILDFLY_HOME/modules/system/layers/base/org/aspectj/aspectjrt/main - 在该目录下新建
module.xml:
- 创建目录
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="org.aspectj.aspectjrt"> <resources> <resource-root path="aspectjrt-1.9.6.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.annotation.api"/> <module name="javax.ejb.api"/> <module name="javax.servlet.api"/> </dependencies> </module>
- 将
aspectjrt-1.9.6.jar放入上述目录
4. 编译时织入(可选)
若采用编译时织入,在pom.xml的<build>节点下添加AspectJ Maven插件:
<plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.14.0</version> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> <configuration> <source>1.8</source> <target>1.8</target> <aspectLibraries> <aspectLibrary> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> </aspectLibrary> </aspectLibraries> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>1.9.6</version> </dependency> </dependencies> </plugin> </plugins>
内容的提问来源于stack exchange,提问作者26Boyka
相关产品推荐
相关产品推荐

