当前位置: 首页 > news >正文

网站模板免费下载网页模板百度平台app

网站模板免费下载网页模板,百度平台app,域名 空间 建网站,怎么做游戏网站编辑今天遇到一个对我来说很奇葩的错误,我想在Service中注入bean,我这里使用了Autowired和Resource都不能注入,导致初始化失败,使用了getBean()方法就可以注入。从来没有遇到过这个问题。后来我查询了一下,才明白了原理。我…

今天遇到一个对我来说很奇葩的错误,我想在Service中注入bean,我这里使用了@Autowired和@Resource都不能注入,导致初始化失败,使用了getBean()方法就可以注入。从来没有遇到过这个问题。后来我查询了一下,才明白了原理。我的getBean()方法如下:

@Service
public class BeanUtils implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}public static <T> T getBean(Class<T> clazz) {return applicationContext.getBean(clazz);}
}

@Autowired

特性:

这是Spring框架提供的注解,支持自动依赖注入。
可以应用于构造函数、方法、字段等。
注入方式:

按类型注入:Spring会在容器中查找与类型匹配的Bean。
可结合@Qualifier:如果存在多个同类型的Bean,可以使用@Qualifier来指定具体的Bean。
required属性:

默认情况下,@Autowired的required属性为true,即要求必须找到对应的Bean。如果找不到,Spring会抛出异常。
设置为false后,如果找不到对应的Bean,注入的字段会被赋值为null。

@Autowired 和 @Resource 的区别

@Autowired

  1. 特性

    • 这是Spring框架提供的注解,支持自动依赖注入。
    • 可以应用于构造函数、方法、字段等。
  2. 注入方式

    • 按类型注入:Spring会在容器中查找与类型匹配的Bean。
    • 可结合 @Qualifier:如果存在多个同类型的Bean,可以使用@Qualifier来指定具体的Bean。
  3. required属性

    • 默认情况下,@Autowiredrequired属性为true,即要求必须找到对应的Bean。如果找不到,Spring会抛出异常。
    • 设置为false后,如果找不到对应的Bean,注入的字段会被赋值为null

@Resource

  1. 特性

    • 这是来自Java EE的注解,常用于JNDI资源的注入。
    • 也可以用于字段或方法。
  2. 注入方式

    • 按名称优先:默认情况下,@Resource会首先根据字段名查找Bean。如果找不到,再按类型查找。
    • 如果使用name属性,可以显式指定要注入的Bean名称。
  3. 没有required属性

    • @Resource没有类似@Autowiredrequired属性,无法控制注入失败时的行为。

为什么有时注解无法注入Bean?

  1. 注入时机

    • Spring的依赖注入发生在容器启动时,如果在构造器中试图注入的Bean尚未初始化,可能导致注入失败。这在Bean之间相互依赖时尤为明显。
  2. 作用域问题

    • 如果一个单例Bean试图注入一个原型Bean,Spring可能只会注入单例Bean的一个实例,而不是每次调用都获取一个新的原型Bean。这种情况下,使用getBean可以获取最新的原型实例。
  3. 条件性注入

    • 使用@Profile@Conditional等注解时,某些Bean可能会因条件未满足而未被创建,导致注入失败。这时手动调用getBean可以获取已经创建的Bean。
  4. 依赖顺序

    • 在复杂的依赖关系中,可能会出现注入顺序问题。如果一个Bean依赖于另一个尚未创建的Bean,Spring可能无法正确处理这类依赖,导致注入失败。手动调用getBean可以避开这个问题。

示例

@Service
public class A {@Autowiredprivate B b; // 如果B尚未初始化,这里可能会失败public void doSomething() {// 使用b的功能}
}@Service
public class B {@Autowiredprivate A a; // A依赖B,可能导致循环依赖
}
http://www.yidumall.com/news/75454.html

相关文章:

  • 使用微信推广的各种方法优化设计
  • 有人用dw做网站吗手机优化软件排行
  • 动画型网站app001推广平台官网
  • php网站开发技术背景现在最好的营销方式
  • 做购物网站怎拼找商家产品线上营销有哪些方式
  • 动态网站代做如何创建个人网站免费
  • 网站seo专员西安竞价推广托管
  • 手机网站建设哪个好网站建设设计
  • wordpress调用最新文章列表手机优化大师下载安装
  • 湖北政府网站集约化建设seo专员是什么职位
  • 临沧网站建设ynyue网络销售就是忽悠人
  • 网站建设的前景教你如何快速建站
  • 网站建设与制作与维护ppt百度公司推广
  • 医院网站建设 价格专业网站制作网站公司
  • 织梦手机端网站怎么做百度资源搜索引擎
  • 域名网站有哪些杭州seo
  • 网站建设案例怎么样怎么去推广自己的产品
  • css3网站制作教程傻瓜式自助建站系统
  • 梧州网站建设贝尔利外贸seo软件
  • 深圳做棋牌网站建设哪家技术好搜索引擎优化的目标
  • 网站制作公司合肥百度推广客服电话24小时
  • 手机访问不了自己做的网站吗百度关键词价格
  • 怎么查网站的备案信息seo百度关键词优化
  • 专业做二手房的网站有哪些百度手机助手应用商店下载
  • wordpress网站有支付功能吗seo是什么姓氏
  • 网站开发w亿玛酷1专注新的营销模式有哪些
  • 一级a做爰片试看 免费网站关键词整站优化
  • 广东seo站外推广折扣拉新推广赚钱的app
  • 布吉网站的建设网络营销的四种方式
  • 旅游门户网站建设方案青岛seo关键词