【问题标题】:Autowire annotation working in Controller but not anywhere else?自动装配注释在控制器中工作但在其他任何地方都没有?
【发布时间】:2015-11-29 16:05:00
【问题描述】:

我使用的是 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

以下是接口及其实现。 AddressDao.java

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

AddressDaoImpl.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}

这背后的原因是什么?

【问题讨论】:

  • 你有什么错误吗?
  • @RossiRobinsion 是的,如上所述,我在 DistanceCalculator 类中遇到了 nullPointerException
  • 代替这个 你可以试试这个吗? 。也不要这样做:,在您的 AddressDaoImpl 类上添加 @Service 注释。
  • @RossiRobinsion 我试过这个。还是一样的错误
  • @RossiRobinsion 在 distanceCalculator.java 中我收到错误,但在 MainController.java 中它正在自动连接

标签: java spring spring-mvc autowired spring-annotations


【解决方案1】:

您必须在 com.au.controller,com.au.util 中添加额外的空间,使其看起来像“com.au.controller,com.au.util”。至于现在只有 com.au.controller 被您的配置扫描。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多