如何@Autowire由外部罐子制成的弹簧豆?

2022-08-31 14:45:43

我有一个模块/jar,我已经创建并用作util。我在那里创建了一个服务,如下所示:

@Service
public class PermissionsService { ... }

...它驻留在这里的一个包中:com.inin.architect.permissions,在我的主应用程序中,我正在引用/加载这个jar(即在应用程序的maven POM.xml文件中设置为依赖项),如下所示:

<dependency>
        <groupId>com.inin.architect</groupId>
        <artifactId>permissions</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

在应用程序中,我想使用该服务,例如:

@Autowired
PermissionsService permissions

在应用程序的弹簧设置中,我有这个:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.inin.generator", "com.inin.architect.permissions" })
public class WebConfig extends WebMvcConfigurerAdapter implements ServletContextAware { }

但是,当我在tomcat下运行我的应用程序时,它抱怨说PermissionsService没有bean:“org.springframework.beans.factory.NoSuchBeanDefinitionException:没有合格的Bean类型......”

那么,如何将 lib 中的 Bean 引入到我的应用程序中呢?当然有办法。您是否必须将库设置为成熟的弹簧MVC应用程序,以便这可以正常工作?也就是说,您是否还必须在lib中设置@Configuration和@ComponentScan?


答案 1

您必须至少扫描包含要注入的类的包。例如,使用 Spring 4 注释:

@Configuration
@ComponentScan("com.package.where.my.class.is")
class Config {
...
}

这与 XML 配置的原则相同。


答案 2

只是一个关于这一点的注意事项,但你可以将你的依赖与春天脱钩。在课堂上创建@Configuration

@Bean public PermissionsService  permissionsService(){
   return new PermissionsService()
}

这也将允许它被注入。并不是说你必须删除弹簧注释,只是一个选项,使其可能在弹簧之外使用。


推荐