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

做58类网站需要多少钱网络营销做的好的企业

做58类网站需要多少钱,网络营销做的好的企业,游戏页面设计模板,免费企业自助建站平台Spring IOC/DI的依赖注入方式及示例 Spring的依赖注入(DI)支持多种方式,以下是核心方式及示例: 1. 构造器注入(Constructor Injection) 通过构造函数传递依赖,确保依赖在对象初始化时存在&…

Spring IOC/DI的依赖注入方式及示例

Spring的依赖注入(DI)支持多种方式,以下是核心方式及示例:


1. 构造器注入(Constructor Injection)

通过构造函数传递依赖,确保依赖在对象初始化时存在,推荐用于必填依赖。

示例代码:
// 依赖接口
public interface UserDao {void save();
}// 依赖实现
@Component
public class UserDaoImpl implements UserDao {@Overridepublic void save() {System.out.println("User saved");}
}// 服务类(通过构造函数注入)
@Service
public class UserService {private final UserDao userDao;// 使用 @Autowired 的构造函数注入@Autowiredpublic UserService(UserDao userDao) {this.userDao = userDao;}public void createUser() {userDao.save();}
}

注释说明

  • @Autowired 标注构造函数,Spring会自动注入 UserDao 的实现。
  • userDao 被标记为 final,确保不可变性。

2. 字段注入(Field Injection)

直接在字段上使用 @Autowired,由Spring自动注入,代码简洁但需谨慎使用。

示例代码:
// 依赖接口和实现与上同// 服务类(通过字段注入)
@Service
public class UserService {@Autowired // 直接在字段上标注private UserDao userDao;public void createUser() {userDao.save();}
}

注释说明

  • 字段直接标注 @Autowired,无需构造函数或Setter方法。
  • 缺点:可能绕过对象初始化逻辑,字段可能为 null(如延迟加载)。

3. Setter方法注入(Setter Injection)

通过Setter方法注入依赖,支持可选依赖或动态修改。

示例代码:
// 依赖接口和实现与上同// 服务类(通过Setter注入)
@Service
public class UserService {private UserDao userDao;// 使用 @Autowired 的Setter方法@Autowiredpublic void setUserDao(UserDao userDao) {this.userDao = userDao;}public void createUser() {userDao.save();}
}

注释说明

  • 依赖通过Setter方法注入,支持可选依赖(如 @Autowired 可标记为 required=false)。

4. @Value 注入基本类型或SpEL表达式

用于注入配置属性(如字符串、数字)或表达式。

示例代码:
@ConfigurationProperties(prefix = "app.config")
@Component
public class AppConfig {private String databaseUrl;private int timeout;// getters/setters
}// 服务类(通过 @Value 注入)
@Service
public class DatabaseService {@Value("${app.config.databaseUrl}") // 从配置文件读取private String databaseUrl;@Value("#{ T(java.lang.Math).random() * 100 }") // SpEL表达式private double randomValue;public void printConfig() {System.out.println("Database URL: " + databaseUrl);System.out.println("Random Value: " + randomValue);}
}

注释说明

  • @Value 支持直接注入配置文件属性(如 application.properties)或表达式。

5. @Qualifier 解决依赖歧义

当存在多个相同类型的Bean时,通过 @Qualifier 指定具体Bean。

示例代码:
// 两个相同接口的Bean
@Component
@Qualifier("primary")
public class PrimaryUserDao implements UserDao {public void save() { System.out.println("Primary DAO"); }
}@Component
@Qualifier("secondary")
public class SecondaryUserDao implements UserDao {public void save() { System.out.println("Secondary DAO"); }
}// 服务类(通过 @Qualifier 指定Bean)
@Service
public class UserService {@Autowired@Qualifier("primary") // 指定使用PrimaryUserDaoprivate UserDao userDao;public void createUser() {userDao.save();}
}

对比表格

方式优点缺点适用场景
构造器注入- 依赖必填,确保初始化完成
- 支持 final 字段
- 测试友好
- 代码冗余(需写构造函数)推荐:必填依赖、复杂对象初始化、测试驱动开发(TDD)
字段注入- 简单快捷- 可能绕过构造函数逻辑
- 字段可能未初始化(null
快速开发、简单场景(非核心依赖)
Setter注入- 灵活支持可选依赖- 依赖可能延迟注入
- 难以保证线程安全
可选依赖、动态修改依赖场景(如配置类)
@Value 注入- 直接注入配置属性或表达式- 仅限简单类型(需配合 @ConfigurationProperties 处理复杂配置)配置参数注入(如数据库URL、常量)
@Qualifier 解歧义- 明确指定Bean,解决类型冲突- 需额外标注,增加代码复杂度多个同类型Bean共存时选择具体实现

选择建议

  1. 优先使用构造器注入:确保依赖存在且易于测试。
  2. 字段注入:仅在简单场景或快速开发时使用。
  3. Setter注入:用于可选依赖或需要后期绑定的场景。
  4. @Value + @ConfigurationProperties:集中管理配置属性。
  5. @Qualifier:解决依赖冲突时明确指定Bean。
http://www.dtcms.com/wzjs/159465.html

相关文章:

  • 网站权重优化方式杭州做搜索引擎网站的公司
  • 免费做销售网站流量平台
  • 品牌设计公司排名品牌形象广告惠州seo网站管理
  • 如何做视频卖给网站长春seo优化企业网络跃升
  • 怎么学做网站PHP百度小程序入口官网
  • 福州自助建站网站百度收录提交入口网址是什么
  • 重庆企业网站排名优化网上推广方式
  • 阿里云做的网站空间优化设计单元测试卷
  • 分享网站模板seo搜索引擎招聘
  • 丝芙兰网站做的好差seo外链代发
  • 律所网站建设建议今日大新闻
  • wordpress后台缓慢牡丹江seo
  • 做网站的公司深百度号码认证平台取消标记
  • 做营销网站建设seo排名快速优化
  • 网站语言包是什么外链百科
  • 自己怎么注册公司网址郑州百度关键词seo
  • 建网站免费软件免费建立个人网站
  • 那些语言可以做动态网站网上打广告有哪些软件
  • 中企做网站seo下拉优化
  • 用什么软件做网站最快网页设计模板图片
  • 注册公司最好用老年人东莞网站制作十年乐云seo
  • 济南物流行业网站建设工具最全的搜索引擎
  • 怎样上传网站到百度电商热门关键词
  • 网站维护上海网站怎么优化排名靠前
  • 杭州网站建设专注乐云seo外贸网站制作
  • 域名和空间都有了怎么做网站品牌营销策略案例
  • 永久免费不收费无限看通州优化公司
  • 网站与app的本质区别广安网站seo
  • 网站后台上传的照片模糊以网络营销为主题的论文
  • 昆明利于优化的网站百度热门关键词排名