当前位置: 首页 > 面试题库 >

spring@Autowired无法正常工作

傅新
2023-03-14
问题内容

我在使用自动装配注释时遇到了一些问题。我的应用程序如下所示:

这是控制器:

@Controller
public class MyController {
    @Autowired
    @Qualifier("someService")
    private SomeService someService;

    ....
}

这是一个服务层:

public interface SomeService {
    ...
}

@Service
public class SomeServiceImpl implements SomeService{    
    @Autowired
    @Qualifier("myDAO")
    private MyDAO myDAO;

    ....
}

和DAO层:

public interface MyDAO{
    ....        
}

@Repository
public class JDBCDAOImpl implements MyDAO {    
    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;    
    ....
}

这是一个app-service.xml文件:

....
<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="/WEB-INF/jdbc.properties" />

<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driverClassName}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}"/>

<bean id="SomeService" class="com.service.SomeServiceImpl" />    
<bean id="myDAO" class="com.db.JDBCDAOImpl" />

所以…当我启动一个Web应用程序时,MyController
Autowires正确(SomeServiceImpl类对象正确注入了someService字段),但是someService的myDAO字段具有空值(未正确注入)。

您能帮我发现问题吗?

PS它很有趣,但是当我将“ bean id”从myDAO更改为另一个(例如myDAO2)时,系统给我一个错误,由于bean
myDAO不存在,无法进行注入。那么,Spring会打针,但是它在哪里?以及为什么它不能正常工作?


问题答案:

我找到了解决方案。正如Javi所说的(非常感谢您,Javi),我必须用@Repository@Service注释DAO和Service层类。现在,我尝试这样写:

@Service("someService")
public class SomeServiceImpl implements SomeService{    
    @Autowired
    @Qualifier("myDAO")
    private MyDAO myDAO;

    ....
}

@Repository("myDAO")
    public class JDBCDAOImpl implements MyDAO {    
    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;    
    ....
}

一切正常!!!

但是我仍然没有找到这个问题的答案:如果应用程序会更复杂,并且结构会更复杂,某些类在哪里不喜欢使用注解@Repositore@Service注解,如何正确注入位于较低级别(在字段中)的bean类,或在类的字段中(@Autowire当然带有注释)?



 类似资料:
  • 问题内容: 我有一个课程,如何让@JsonIgnore工作。即使将注释放在此处,它也不会影响输出。我正在使用杰克逊。 这是我的Controller方法: 这是我的servlet-context.xml: 问题答案: 我终于找到了解决方案。我将导入声明从 至 基本上,您必须确保在所有地方都使用相同的类。

  • } 这是我的配置。但似乎/用户/无法被任何人访问。 每当我输入“. hasRole(“RoleName”)”时,它只会拒绝该角色的访问。我得到一个{“时间戳”:1526671066818,“状态”: 403,“错误”:“禁止”,“消息”:“拒绝访问”,“路径”:“/用户”} 从那。 我想要的是,一些请求只允许“USER”访问,例如:“/entrysheet”,“/datasheet”等,而“ADM

  • 问题内容: 我正在尝试使用带注释的TX Spring支持。 应用程序上下文XML: 实际代码: 调用代码: 它给出了 FALSE。 我究竟做错了什么? 问题答案: 您应该在配置中添加它 在您的RepositoryClass上添加一个接口 这在你的测试课中 请参阅本教程。

  • 计划程序的设置: 和@enableScheduling在类中使用@configuration。 问题是fixedDelay正确工作两次,然后在迭代之间暂停1.5分钟。我在计划注释中尝试过fixedRate或cron,但都没有帮助。 方法在调度任务中的工作时间为100ms,项目有足够的内存,但调度程序的工作速度很慢。

  • 实际上,我对spring代理的行为感到困惑。我想我知道j2ee、cglib和AspectJ的代理机制之间的主要区别。我在配置类中启用了aspectj自动代理,并且aspectj包含在类路径中。 我的配置 最后,我发现是我的服务上的接口导致了这种行为。似乎spring决定在我的服务实现任何接口时使用j2ee代理。如果我移除它们,它就会起作用。 失败: 好的: ...强制spring不使用j2ee代理

  • 有的安全措施起作用,有的不起作用。 如果我的html文件中包含以下内容: 结果是: (->但它不起作用,因为每个人都可以一直看到它) (->按预期工作) (->有效) (->正确) 正如你所看到的,其他人根本没有出现。 html标记如下所示: 我的pom.xml具有以下依赖关系: 我的SecurityConfig如下所示: 所以基本上只要和角色没有任何关系,一切都是正常的。如果它是基于角色的,那么

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法

  • 问题内容: 我在JLayeredpane上有两个JPanels。其中一个显示pdf,重叠的一个具有透明背景(我使用过setOpaque(false))。现在,我可以将图形添加到透明面板中,这样看来我实际上是在注释pdf。我想要一个橡皮擦工具来删除这些注释。我尝试使用以下代码 其中path是由多条线构成的形状。现在,不是在先前的图形上绘制 透明线 ,而是绘制 黑线 。我要去哪里错了? 问题答案: 请