我有一个Spring引导休息服务,它包含pom中的外部项目,因为它的依赖性。该外部项目基本上是一个具有弹簧AOP代码的jar。
我的主应用程序中包含带有弹簧AOP代码的外部jar的基础包是x.y.z
@before建议所在的外部jar中的类位于包a.b.c下 使用a.b.c包下的这个类,它不会被主应用程序识别,我想使用spring aop实现并应用方面。但是,当我将它的包从a.b.c更改为x.y.z(我现在无法做到)时,它可以正常工作。
我知道在Spring引导服务中碰巧是包含服务,它会扫描应用程序类中给出的根包下的所有内容,在这种情况下是xyz,这就是为什么方面工作正常如果它的类是在XYZ
然而,问题是这个春天的应用程序jar将用于多个应用程序。所以改变这样的包名不是一种选择。
有没有办法在不更改spring app代码所在的类的包名的情况下完成此操作?
答案 0 :(得分:0)
默认情况下,组件扫描可能仅针对您的应用程序类包激活。您可以将其扩展到多个包,包括方面包:
XML样式配置:
<context:component-scan base-package="x.y.z, a.b.c" />
注释样式配置:
@ComponentScan(basePackages = {"x.y.z", "a.b.c"})
免责声明:我不是Spring用户,只是AspectJ专家。我只知道您可以配置组件扫描,为您搜索语法并希望它是正确的。
答案 1 :(得分:0)
请在主应用程序内定义(jar项目的)bean。提供@ComponentScan(basePackages = {“ x.y.z”,“ a.b.c”})以及@EnableAspectJAutoProxy。还包括下面的代码。
例如:
` @Bean
public LoggingHandler loggingHandler()
{
return new LoggingHandler();
}`
还可以通过以下方式注释外部jar代码:
`@Aspect
@Component
public class LoggingHandler {`
答案 2 :(得分:-1)
@kriegaex建议的是正确的。除此之外,请确保您使用@Component
以及@Aspect
。由于@Aspect
不是Spring注释,因此Spring不会识别它,因此您的方面将不会被注册。因此,使用@Component
是必须使方面在Spring环境中工作。