Spring3 - @Autowired

时间:2011-05-10 04:37:57

标签: spring-mvc

这是我的applicationContext.xml

<bean id="JdbcUserDao" class="controller.User.JdbcUserDao">
    <property name="dataSource" ref="dataSource"/>
</bean>


<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="org.apache.derby.jdbc.ClientDriver"
      p:url="jdbc:derby://localhost:1527/TodoDb"
      p:username="root"
      p:password="root" />

这是我的implDao课程:

@Repository
public class JdbcUserDao implements IUserDao {

    private JdbcTemplate jt;
    @Autowired
    private DataSource dataSource;

    public DataSource getDataSource() {
        return dataSource;
    }

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
            jt = new JdbcTemplate(this.dataSource); 
    }

    public JdbcTemplate getJt() {
        return jt;
    }

    public void setJt(JdbcTemplate jt) {
        this.jt = jt;
    }


    @Override
    public List<User> getUsers(final String username, final String password) {
        List<User> users = this.jt.query("SELECT username, password FROM USERS",
            new RowMapper<User>() {

                @Override
                public User mapRow(ResultSet rs, int i) throws SQLException {
                    User user = new User();
                    user.setUsername(rs.getString("username"));
                    user.setPassword(rs.getString("password"));
                    return user;
                }
            });
        return users;
    }
}

问题:

  • this.dataSource在通过@Autowired设置dataSource时可用,如xml中的配置
  • 当我在getUsers中使用dataSource时,它变为null?

问题:

  1. 我怎样才能做到这一点?
  2. 我是spring3的新手,所以我真的需要你的帮助。

4 个答案:

答案 0 :(得分:2)

要使用自动装配,您需要将以下内容添加到xml文件配置中。

<context:annotation-config />

如果没用,请添加

<context:component-scan base-package="org.springframework.jdbc.datasource" />

答案 1 :(得分:1)

尝试将AutowiredPostProcessor添加到配置

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
 </bean>

答案 2 :(得分:0)

您可以尝试将autowire添加到set方法而不是属性。

答案 3 :(得分:0)

您需要导入您正在进行自动装配的类,而不需要存储库类文件中的访问修饰符

generate(Num) -> 
  Result = generate(Num, []),
  Dedup = deduplicated(Result),
  file:write_file("./react/src/Data/gennedmons", io_lib:fwrite("~p.\n", [Dedup])),
  Dedup.

和spring注释

com.<your project>.controller.User.JdbcUserDao