如果包含在具有不同包名

时间:2018-05-01 23:34:13

标签: spring spring-boot aop aspectj spring-aop

我有一个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代码所在的类的包名的情况下完成此操作?

3 个答案:

答案 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环境中工作。