How can I fix this issue just using the configuration in application
  context?
You could use the qualifier tag like below (see https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-autowired-annotation-qualifiers)
<context:annotation-config/>
  <beans>
    <bean class="your_pkg_route.Vehicle">
      <qualifier value="bike"/>
    </bean>
  </beans>
</context:annotation-config>
I found people talking about autowire attribute in the bean
  declaration and I need more explanation about it
Using Annotation
@Autowired used on a bean declaration method injects the defined dependencies by (another) declared beans. Now, if your dependencies are in the same context of your application, you don't need to use the @Autowired annotation at all because Spring is able to figure them out by itself. So, if your dependencies are outside your applicatoin context then you can use it.
For example, take as reference the below code:
@Autowired
@Bean
public MyBean getMybean(Dependency1 depdency1, Dependency2 depdency2) {
    return new MyBean(depdency1.getSomeStuff(), depdency2.getSomeOtherStuff());
}
Here, @Autowired will find an instance of Dependency1 and Dependency2 and will provide them for the creation of an instance of MyBean.
Using xml configuration
From Pro Spring 5... Spring supports five modes for autowiring.
- byName: When using- byNameautowiring, Spring attempts to wire each property to a bean of the same name. So, if the target bean has a property named- fooand a- foobean is defined in- ApplicationContext, the- foobean is assigned to the- fooproperty of the target.
- byType: When using- byTypeautowiring, Spring attempts to wire each of the
properties on the target bean by automatically using a bean of the same type in- ApplicationContext.
- constructor: This functions just like- byTypewiring, except that it uses constructors rather than setters to perform the injection. Spring attempts to match the greatest numbers of arguments it can in the constructor. So, if your bean has two constructors, one that accepts a- Stringand one that accepts- Stringand an- Integer, and you have both a- Stringand an- Integerbean in your- ApplicationContext, Spring uses the two-argument constructor.
- default: Spring will choose between the- constructorand- byTypemodes
automatically. If your bean has a default (no-arguments) constructor, Spring uses- byType; otherwise, it uses constructor.
- no: This is the default
So, in your case you would need to do something like this (BUT, I would NOT recommend it. Why?, you would need to declare Vehicle class as a bean and a component which is not correct, see Spring: @Component versus @Bean. On the other hand I'm not sure if you could use it just declaring it as a bean):
// xml config
<context:annotation-config/>
  <beans>
    // use the primary tag here too! in order to say this the primary bean
    // this only works when there are only two implementations of the same interface
    <bean id="bike" primary="true" class="your_pkg_route.Bike"/>
    <bean id="car" class="your_pkg_route.Car"/>         
    <bean autowire="byName" class="your_pkg_route.VehicleService"/>
  <beans>
</context:annotation-config>
// VehicleService
@Component
public class VehicleService {
    private Vehicle bike;   // call attribute 'bike' so it is autowired by its name
    public void service() {
         //...
    }
}
As you can see there is a lot of complications trying to do this using xml config, so I would recommend you to use the annotation option if possible.
Related posts:
PS: I have not tested any of the posted codes.