@Autowire和@Resource注解的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@Autowire和@Resource注解的区别相关的知识,希望对你有一定的参考价值。

参考技术A 1.@Autowire默认是按照bytype方式(也就是接口类型方式),如果发现spring容器好几个类type一样,就按照byname方式(字段的名字,如indexDaoImpl)比如下图service依赖了dao,但是spring容器管理了两个DAO实现,此时不能Bytype,此时会按照byname注入indexDaoImpl这个

但是如果字段名字改成任意字符,如:

spring注入就会报错

2.@Resource注解就是按照名称来注入,跟set方法名称无关,跟注入字段名称相关。

然后@Resource也能指定bytype来注入

解决自定义Shiro.Realm扩展类不能用注解(@Resource或@Autowire)自动装配的问题

问题产生原因:加载Realm时其他Spring配置文件(xml)尚未加载,导致注入失败。

解决方法:编写一个设置类把注入工作提前完成。

package com.xkt.shiro

import org.apache.shiro.realm.Realm;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;

/**
 * 把securityManager和userRealm装配到ApplicationContext
 */
@Configuration
public class ShiroConfig implements ApplicationContextAware {

    @Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {
        Realm userRealm = (Realm) ac.getBean("userRealm");
        DefaultWebSecurityManager defaultWebSecurityManager = (DefaultWebSecurityManager) ac.getBean("securityManager");
        defaultWebSecurityManager.setRealm(userRealm);
    }
}

以上是关于@Autowire和@Resource注解的区别的主要内容,如果未能解决你的问题,请参考以下文章

解决自定义Shiro.Realm扩展类不能用注解(@Resource或@Autowire)自动装配的问题

@Autowired和@Resource装配

@Autowired, @Resource, @Inject 三个注解的区别你懂吗?别再乱用了!

java spring component与autowire区别

@Autowired和@Resource注解的区别?

关于@Autowired和@Resource注解区别