I used @Autowired hundreds of time but today I don't get it, neither @Autowired nor @Inject work in a new project I just created, I get the famous error 
Invalid property 'jdbcTemplate' of bean class [com.xxx.SomeDAO]: Bean property 'jdbcTemplate' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
When I add a setter for jdbcTemplate in SomeDAO, it works...  
applicationContext.xml:
...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>
<bean id="com.xxx.SomeDAO" class="com.xxx.SomeDAO">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
...
SomeDAO.java:
import org.springframework.jdbc.core.JdbcTemplate;
import javax.inject.Inject;
//import org.springframework.beans.factory.annotation.Autowired;
public class SomeDAO {
    @Inject // Doesn't work
    //@Autowired // Doesn't work either
    private JdbcTemplate jdbcTemplate;
    ...
    /* Works if I add this setter
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }*/
}
What could prevent the injection through the annotation? Thanks!
 
     
    