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

网站制作 昆明seo百度推广

网站制作 昆明,seo百度推广,免费发布招工的平台,武汉网站制作成功案例介绍 在Spring框架中,依赖注入(Dependency Injection, DI)是实现控制反转(Inversion of Control, IoC)的核心机制。 除了通过XML配置的注入方式(已逐渐被淘汰),Spring还支持多种基…

介绍

在Spring框架中,依赖注入(Dependency Injection, DI)是实现控制反转(Inversion of Control, IoC)的核心机制。

除了通过XML配置的注入方式(已逐渐被淘汰),Spring还支持多种基于注解和Java配置的注入方式。以下是常见的注入方式:

 构造方法注入(Constructor Injection)

  • 描述:通过构造方法将依赖注入到Bean中。

  • 优点

    • 强制依赖,确保Bean在创建时就拥有所有必需的依赖。

    • 适合不可变对象(属性可以声明为final)。

    • 线程安全。

  • 使用场景:推荐用于强依赖的场景。

  • 示例

    @Component
    public class DemoService {private final DemoRepository repository;// 从Spring 4.3开始,如果只有一个构造方法,可以省略@Autowired@Autowired public DemoService(DemoRepository repository) {this.repository = repository;}
    }

Setter方法注入(Setter Injection)

  • 描述:通过Setter方法将依赖注入到Bean中。

  • 优点

    • 灵活性高,可以在对象创建后动态修改依赖。

    • 适合可选依赖。

  • 使用场景:适合依赖是可选的或需要动态修改的场景。

  • 示例

@Component
public class DemoService {private DemoRepository repository;@Autowiredpublic void setRepository(DemoRepository repository) {this.repository = repository;}
}

字段注入(Field Injection)

  • 描述:直接在字段上使用@Autowired注解注入依赖。

  • 优点

    • 代码简洁,无需编写构造方法或Setter方法。

  • 缺点

    • 依赖关系不明确,难以测试(无法通过构造方法或Setter方法注入Mock对象)。

    • 违反了单一职责原则,隐藏了类的依赖关系。

  • 使用场景:适合简单的场景,但不推荐在生产代码中使用。

  • 示例

@Component
public class DemoService {@Autowiredprivate DemoRepository repository;
}

方法注入(Method Injection)

  • 描述:通过任意方法注入依赖,方法可以是普通方法或Bean生命周期回调方法(如@PostConstruct)。

  • 优点

    • 灵活性高,可以在方法中执行额外的逻辑。

  • 使用场景:适合需要在注入时执行额外逻辑的场景。

  • 示例

@Component
public class DemoService {private DemoRepository repository;@Autowiredpublic void setupRepository(DemoRepository repository) {this.repository = repository;// 可以在这里执行其他逻辑}
}

接口注入(Interface Injection)

  • 描述:通过实现特定接口来注入依赖。Spring本身并不直接支持这种方式,但可以通过自定义接口和AOP实现。

  • 优点

    • 高度灵活,适合需要动态注入的场景。

  • 缺点

    • 实现复杂,代码侵入性强。

  • 使用场景:适合需要高度自定义注入逻辑的场景。

  • 示例

public interface RepositoryAware {void setRepository(DemoRepository repository);
}@Component
public class DemoService implements RepositoryAware {private DemoRepository repository;@Overridepublic void setRepository(DemoRepository repository) {this.repository = repository;}
}

注解注入(Annotation-based Injection)

  • 描述:通过注解(如@Autowired@Resource@Inject)实现依赖注入。

  • 优点

    • 代码简洁,易于使用。

    • 支持多种注入方式(构造方法、Setter方法、字段等)。

  • 使用场景:适合大多数基于注解的依赖注入场景。

  • 示例

@Component
public class DemoService {@Autowiredprivate  DemoRepository repository;}

Java配置注入(Java Configuration Injection)

  • 描述:通过@Configuration类和@Bean方法显式配置依赖注入。

  • 优点

    • 完全基于Java代码,无需XML配置。

    • 适合需要复杂逻辑的依赖配置。

  • 使用场景:适合需要显式控制Bean创建和依赖注入的场景。

  • 示例

@Configuration
public class DemoConfig {@Beanpublic DemoRepository demoRepository() {return new DemoRepository();}@Beanpublic DemoService demoService() {return new DemoService(demoRepository());}
}

Lookup方法注入(Lookup Method Injection)

  • 描述:通过@Lookup注解或<lookup-method>标签实现方法级别的依赖注入,通常用于注入原型(Prototype)Bean到单例(Singleton)Bean中。

  • 优点

    • 解决单例Bean中注入原型Bean的问题。

  • 使用场景:适合需要每次调用方法时返回不同实例的场景。

  • 示例

@Component
public abstract class DemoService {@Lookuppublic abstract DemoPrototypeBean getPrototypeBean();public void doSomething() {DemoPrototypeBean bean = getPrototypeBean();// 使用bean}}

总结

Spring提供了多种依赖注入方式,每种方式都有其适用场景和优缺点。以下是推荐的使用方式:

  • 推荐:构造方法注入(强制依赖、线程安全、不可变性)。

  • 可选:Setter方法注入(适合可选依赖或动态修改依赖)。

  • 不推荐:字段注入(代码简洁但隐藏依赖关系,难以测试)。

  • 特殊场景:方法注入、接口注入、Lookup方法注入等适合特定需求。




http://www.hkea.cn/news/495677/

相关文章:

  • 小白学做搭建网站软文街官方网站
  • 网站模板 可做采集站市场营销咨询
  • 家居网站建设素材天眼查询个人信息
  • 杭州专业网站排名优化交换链接的例子
  • 网站建设和数据容量整合seo的培训课程
  • 深圳 网站制作 哪家百度搜索排名优化哪家好
  • 网站运营者网址发稿平台
  • 内蒙古网站制作公司拼多多网店代运营要多少费用
  • 免费网站建设协议baike seotl
  • 做网站的好处和坏处怎么创建自己的网址
  • 兰州新区城乡建设局网站seo sem是什么职位
  • 衡水网站制作公司自媒体软文发布平台
  • 东莞圆心科技网站开发网页搜索
  • 日照网站建设价格百度推广怎么优化关键词的质量
  • 竭诚网络网站建设开发百度搜索竞价推广
  • 浙江住房和城乡建设厅报名网站下拉关键词排名
  • 银川哪里做网站百度网址名称是什么
  • 合肥公司网站建设价格低西安网络科技公司排名
  • 怎么样建设个人网站企业文化建设
  • 如何知道网站有没有备案成都seo公司
  • wordpress 艺术主题南京网络优化公司有哪些
  • 贵阳网站备案百度网站优化方案
  • 单位网站建设论文怎么做竞价托管
  • 建筑公司网站有哪些谈谈自己对市场营销的理解
  • 做ppt音乐怎么下载网站企业培训课程有哪些
  • magento网站建设网站优化排名软件网站
  • 做生鲜食品最好的网站网络推广及销售
  • 销售管理系统需求分析长沙seo代理
  • 站长网站查询深圳百度关键字优化
  • 用net语言做网站平台好不好企业培训师资格证报考2022