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

重庆做网站建设的公司哪家好成都网站制作维护

重庆做网站建设的公司哪家好,成都网站制作维护,龙岩做网站开发哪家做的好,街道办的网站由谁做的在 Java 中实现依赖注入(Dependency Injection, DI)的核心思想是将对象的依赖关系从代码内部转移到外部容器或框架管理。以下是常见的实现方式及示例: 一、手动实现依赖注入(不依赖框架) 1. 构造器注入 通过类的构造…

在这里插入图片描述

在 Java 中实现依赖注入(Dependency Injection, DI)的核心思想是将对象的依赖关系从代码内部转移到外部容器或框架管理。以下是常见的实现方式及示例:


一、手动实现依赖注入(不依赖框架)

1. 构造器注入

通过类的构造函数传递依赖对象:

// 接口定义
public interface Logger {void log(String message);
}// 具体实现
public class ConsoleLogger implements Logger {@Overridepublic void log(String message) {System.out.println("Console: " + message);}
}public class FileLogger implements Logger {@Overridepublic void log(String message) {System.out.println("File: " + message);}
}// 使用依赖注入的类
public class UserService {private final Logger logger;// 构造器注入依赖public UserService(Logger logger) {this.logger = logger;}public void createUser(String name) {logger.log("Creating user: " + name);}
}// 手动创建对象并注入依赖
public class Main {public static void main(String[] args) {// 选择具体实现Logger logger = new ConsoleLogger();UserService userService = new UserService(logger);userService.createUser("Alice");}
}
2. Setter 注入

通过 setter 方法设置依赖对象:

public class UserService {private Logger logger;public void setLogger(Logger logger) {this.logger = logger;}public void createUser(String name) {if (logger == null) {throw new IllegalStateException("Logger not initialized");}logger.log("Creating user: " + name);}
}public class Main {public static void main(String[] args) {UserService userService = new UserService();userService.setLogger(new FileLogger());userService.createUser("Bob");}
}

在这里插入图片描述

3. 工厂模式

通过工厂类动态创建对象并注入依赖:

public class LoggerFactory {public static Logger getLogger(String type) {switch (type) {case "console":return new ConsoleLogger();case "file":return new FileLogger();default:throw new IllegalArgumentException("Invalid logger type");}}
}public class Main {public static void main(String[] args) {Logger logger = LoggerFactory.getLogger("console");UserService userService = new UserService(logger);userService.createUser("Charlie");}
}

在这里插入图片描述

二、使用框架实现依赖注入(推荐)

1. Spring 框架
(1) 构造器注入

步骤

  1. 定义接口和实现类。
  2. 使用 @Component 标记组件。
  3. 在目标类中使用 @Autowired 注解注入依赖。

示例

// 定义接口
public interface DatabaseService {String query(String sql);
}// 实现类
@Component
public class MySQLService implements DatabaseService {@Overridepublic String query(String sql) {return "MySQL Result: " + sql;}
}// 目标类
@Component
public class UserService {private final DatabaseService databaseService;// 构造器注入@Autowiredpublic UserService(DatabaseService databaseService) {this.databaseService = databaseService;}public String getUserData() {return databaseService.query("SELECT * FROM users");}
}// 启动类
@SpringBootApplication
public class App {public static void main(String[] args) {ApplicationContext context = SpringApplication.run(App.class, args);UserService userService = context.getBean(UserService.class);System.out.println(userService.getUserData());}
}
(2) Setter 注入
@Component
public class UserService {private DatabaseService databaseService;@Autowiredpublic void setDatabaseService(DatabaseService databaseService) {this.databaseService = databaseService;}
}
(3) 字段注入(不推荐)
@Component
public class UserService {@Autowiredprivate DatabaseService databaseService;
}
2. Google Guice 框架
(1) 绑定依赖

通过模块(Module)绑定接口到实现类:

public class AppModule extends AbstractModule {@Overrideprotected void configure() {bind(DatabaseService.class).to(MySQLService.class);}
}
(2) 注入依赖
public class UserService {private final DatabaseService databaseService;@Injectpublic UserService(DatabaseService databaseService) {this.databaseService = databaseService;}
}// 使用 Guice 创建对象
public class Main {public static void main(String[] args) {Injector injector = Guice.createInjector(new AppModule());UserService userService = injector.getInstance(UserService.class);System.out.println(userService.getUserData());}
}

三、测试环境中的依赖注入

使用 Mockito 注入模拟对象进行单元测试:

public class UserServiceTest {@Testvoid testGetUser() {// 创建模拟依赖DatabaseService mockDb = Mockito.mock(DatabaseService.class);when(mockDb.query(1)).thenReturn("Alice");// 构造目标类并注入依赖UserService userService = new UserService(mockDb);// 执行方法并验证结果assertEquals("Alice", userService.getUser(1).getName());}
}

四、依赖注入的核心模式

模式描述
控制反转(IoC)由容器(如 Spring/IoC 容器)控制对象的创建和管理,而非代码自身控制。
服务定位器通过统一接口(如 ServiceLocator)动态获取依赖对象,常见于手动实现。
依赖倒置高层模块不依赖低层模块,二者都依赖抽象接口(如 Logger 接口)。

在这里插入图片描述

五、最佳实践

  1. 优先构造器注入:确保对象在创建时依赖已满足,避免 NullPointerException
  2. 避免字段注入:破坏封装性,难以追踪依赖来源。
  3. 使用接口抽象:隔离具体实现,提高代码灵活性。
  4. 结合单元测试:通过模拟依赖快速验证功能。

通过以上方式,可以灵活实现依赖注入,降低代码耦合度,提升可维护性和可测试性。

http://www.dtcms.com/wzjs/31195.html

相关文章:

  • 哪些赌博的网站怎么做的网站是怎么做出来的
  • 中国建设银行网站个人计算机培训班有用吗
  • 黑色网站配色做百度推广销售怎么样
  • 网站建设类seo自动点击排名
  • 企业网站建设需要准备资料什么关键词可以搜到那种
  • 网站建设自助建站六年级上册数学优化设计答案
  • 旅游网站建设ppt模板下载软文免费发布平台
  • 专业网站建设在哪里沈阳线上教学
  • 加盟网站建设案例欣赏市场调研报告怎么写的
  • 建设规划委员会网站百度竞价代运营
  • 长春谁家做网站网络营销策划书
  • 手机网站建设的整体流程图做app的网站
  • 招聘桂林网站推广维护建设大学生网页设计作业
  • 大同网站建设优化推广成人短期技能培训学校
  • 自己做鞋子网站aso优化榜单
  • 电子商务网站建设规划实践成果湛江百度seo公司
  • 承包网站开发网络服务提供者
  • 网站结构分析具体分析内容互联网推广怎么做
  • 广州的服装网站建设新手小白怎么做跨境电商
  • 想做网站怎么做网站销售怎么推广
  • 河西做网站企业如何做好网络营销
  • 商城网站建设定制网站建设香飘飘奶茶
  • 淘客请人做网站免费网站推广平台
  • 个人域名能做网站吗最新域名ip地址
  • 表白墙网站怎么做常州网站制作维护
  • 公司网站制作怎么弄武汉seo群
  • 做设计一般在那个网站找图郑州全域静态管理
  • 综合电商网站建设需求文档上海百度研发中心
  • 成品网站定制地推平台
  • 如何做网站平台快速排名教程