@Autowired应该怎么用?

wyd987100
  • 123

好像一般书上都是这么用的

@Autowired
private UserRepository userRepository;

我写的时候运行是没问题的,但是IntelliJ会标红,说找不到bean什么的

看Spring.io的源码的时候发现人家是这么写的

private UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

写在构造方法上的,新手表示不解,应该怎么写,求指教

回复
阅读 4.5k
6 个回答

如果是mybatisdubbo这类框架,由于其bean提供方式有点不同,所以IDEA的静态检查并不能感知到bean被注入了,所以显示红色波浪线,关掉这个提示就好了。

Spring bean通过@Autowired注入,spring auto scan配置,在编辑情况下,无法找不到对应的bean,于是提示找不到对应bean的错误。

但build项目是能正常运行的。

可在File -- Settings -- Inspections。在Spring Model -- Autowring for Bean Class 中,

将Severity的级别由之前的error改成warning或者直接取消提醒。

Spring注入的方式有多种,可以写在field上,可以写在setter方法上,可以写在constructor上。
你使用的方式是写在了field上,你看到的是写在了constructor上

你的写法是没错的,找不到bean的话,可能是配置的问题,在applicationContext.xml里需要有下面的配置语句:

<context:component-scan base-package="需要自动扫描的包" />

1.属性上加这个,就是IOC的应用了,spring通过配置文件,来帮你装配bean对象进来。
2.@Autowired加在方法上的时候,Spring会先实例化所有Bean,然后根据配置进行扫描,当检测到@Autowired后进行注入,注入时调用这个方法。

楼上正解!!!

你知道吗?

宣传栏