How can I @Autowire a spring bean that was created from an external jar?

You have to scan at least the package containing the class you want to inject. For example, with Spring 4 annotation:

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

It is the same principle for XML configuration.


Just a note on this, but you could decouple your dependency from spring. In your @Configuration class create

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

This will also allow it to be injected. Not that you have to remove your spring annotation, just an option making it potentially usable outside of spring.


Ok - i had exactly the same problem - i wanted to autowire a mongo db repository interface from an external jar.

  • I could autowire every bean from that jar with using

    @SpringBootApplication(scanBasePackages = {"com.myrootpackage"})

  • However - autowiring the interface always failed with "Could not find blablabla..."

But the interface was in the same package as the beans i could import. It turned out that searching for the mongo db interfaces is NOT taking the scanBasePackages from the @SpringBootApplication into consideration!

It has to be explicitly configured via

@EnableMongoRepositories(basePackages = {"com.myrootpackage"})

Or you could move the main class "up" so the default searching works also for the mongo interfaces. So i understood the problem and found a solution. But i am still a bit unhappy because i need to configure the same lookup path twice. I find it stupid honestly.