java - 使用 Spring 从外部项目注入(inject)方面类时出现问题

标签 java eclipse spring tomcat aop

如果这个问题已经在某个地方找到了答案,我深表歉意,我环顾四周,没有看到任何我可以利用的东西。在 eclipse 中启动我的 tomcat 服务器时出现此异常:

java.lang.ClassNotFoundException: com.sample.aspects.SomeAspect
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:246)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:395)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1346)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1317)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:623)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:592)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1394)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:957)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:705)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:622)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

这是我正在使用的 servlet.xml

<bean id="someAspect"
    class="com.sample.aspects.SomeAspect" />

<aop:aspectj-autoproxy proxy-target-class="true" />

com.sample.aspects.SomeAspect 是我使用 eclipse 类路径和 gradle 导入的外部项目中的一个类。我假设我只是在我的类路径上做错了什么,并告诉 Spring 如何初始化我的方面,但我有点不知道如何正确地做到这一点。有什么建议么?我真的更愿意将方面保留在 Web 应用程序之外,但我想知道这是否可以通过 Spring AOP 实现。

如果有帮助,这就是我在 gradle 项目中所做的

dependencies{
...
    compile project(':sample-projectwithaspectsclasses')
}

com.sample.aspects.SomeAspect 的代码在 sample-projectwithaspectsclasses 中

最佳答案

您只定义了对外部项目的类路径依赖,这就是编译没有失败的原因,但是您在运行时需要这个文件,您可以手动将这个 jar 添加到您的 Web 项目的 lib 文件夹中,或者我认为您可以这样做这在启动配置中使用 eclipse 并添加运行时依赖项。

关于java - 使用 Spring 从外部项目注入(inject)方面类时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26025941/

相关文章:

java - Eclipse:.war 生成的依赖项

java - 第三方jar spring boot中的类文件内的@Value

java - 将运行时参数传递给 OSGi felix scr 注释中的服务

java - 无法使用 os.popen 捕获 java -version 的输出

android - 如何为每个项目构建关闭 C++ 编译器

Java Bean 复合注入(inject)

java - 从文件到 HTML 服务器端的内联 JS

java - 生成字符串的树路径

java - 在 Java 中以原子方式执行一对操作的非阻塞策略

java - 如何加载eclipse插件