繁体   English   中英

Autowire注释可以在Controller中工作,但不能在其他地方工作?

[英]Autowire annotation working in Controller but not anywhere else?

我正在使用Spring 4.1.1。 我的spring-dispatcher-servlet.xml中有以下内容

<context:component-scan base-package="com.au.controller,com.au.util" /> 
<mvc:resources location="/" mapping="/**" />
<mvc:annotation-driven />

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/caballocation" />
    <property name="username" value="root" />
    <property name="password" value="1234" />
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<bean id="AddImplDao" class="com.au.dao.AddressDaoImpl" />

我在com.au.controller包中有以下控制器类

  @Controller
  public class ControllerMain {

    @Autowired
    AddressDao obj;
    @RequestMapping(value = "/test")
    public @ResponseBody String test(){
        //logger.debug("getWelcome is executed!");
        obj.select();
        return "1";
    }

}

在上面的代码中,obj.select可以自动接线。

但是com.au.util程序包中的以下类的值自动连接的对象为null。

    public class DistanceCalculator {

        @Autowired
        AddressDao obj1;
        public String calculate(String from, String to) throws IOException, JSONException {
        ..
        Map output = obj1.calc(from, to);
        ..
        }

执行时Obj1为空。 在obj1.calc(from,to)处获取java.lang.NullPointerException

以下是该接口及其实现。 地址Dao.java

public interface AddressDao {
    public void select();
    public Map calc(String from,String to);
}

地址DaoImpl.java

public class AddressDaoImpl implements AddressDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    private SimpleJdbcCall simpleJdbcCall;

    @Autowired
    public void setDataSource(DataSource dataSource) {
       this.simpleJdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("CheckForValuesInDB");
    }

    @Override
    public void select() {
        // TODO Auto-generated method stub
    }

    @Override
    public Map calc(String from, String to) {
        // TODO Auto-generated method stub}

这背后的原因是什么?

您必须在com.au.controller,com.au.util中添加额外的空间,因此其外观应类似于“ com.au.controller,com.au.util”。 目前,您的配置仅扫描com.au.controller。

//编辑DistanceCalculator类中应该有@Component批注

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM