做网站公司信科建站免费企业做网站步骤
web/
2025/9/26 13:20:55/
文章来源:
做网站公司信科建站免费,企业做网站步骤,企业网站开发注意什么,ps做素材下载网站有哪些一、DI (依赖注入)
依赖注入#xff08;DI#xff09;是一种实现控制反转#xff08;IoC#xff09;的技术#xff0c;可以在运行时动态地向应用程序提供其所需的依赖。在 Spring 框架中#xff0c;DI 是一种常用的实践#xff0c;有助于提高代码的模块化和灵活性。下面… 一、DI (依赖注入)
依赖注入DI是一种实现控制反转IoC的技术可以在运行时动态地向应用程序提供其所需的依赖。在 Spring 框架中DI 是一种常用的实践有助于提高代码的模块化和灵活性。下面是依赖注入的一些关键点和优势
依赖注入的工作原理 容器管理 在 Spring 中容器负责创建和管理对象即 Beans。开发者只需要通过配置可以是 XML 文件、注解或 Java 配置类指定依赖关系。 注入方式 构造器注入通过构造函数传递依赖。设置器注入通过 JavaBean 属性的 setter 方法传递依赖。字段注入直接在字段上注入依赖通常使用 Autowired 注解。 运行时绑定 依赖注入是在运行时处理的这意味着应用程序的组件可以在不修改代码的情况下通过更改配置来使用不同的依赖实现。
二、使用 字段注入自动注入 Bean
在 Spring 的组件如由 Component, Service, Controller 等注解标记的类中你可以使用 Autowired 注解自动注入 Bean。这是推荐的方法因为它减少了对 Spring API 的直接依赖并且使得代码更加简洁。
Component
public class UserService {Autowiredprivate User user;public void displayUser() {System.out.println(User Name: user.getName());}
}Spring 应用中使用 Autowired 注解自动注入 Bean 且存在多个相同类型的 Bean 时会出现冲突因为 Spring 不知道应该注入哪一个。为了解决这个问题Spring 提供了几种方法来指定要注入的具体 Bean确保准确性和灵活性。
1指定Bean 注入
a) 使用 Qualifier 注解
Qualifier 注解用来进一步细化 Autowired 的注入选择。通过为每个 Bean 定义一个名称然后在注入时指定这个名称可以控制哪一个 Bean 被注入。
Component
public class VehicleService {AutowiredQualifier(car)private Vehicle vehicle;public void service() {vehicle.performService();}
}Component(car)
public class Car implements Vehicle {Overridepublic void performService() {System.out.println(Servicing a car);}
}Component(bike)
public class Bike implements Vehicle {Overridepublic void performService() {System.out.println(Servicing a bike);}
}在这个例子中我们有两个 Vehicle 类型的 Bean分别是 Car 和 Bike。使用 Qualifier(car) 告诉 Spring 在注入 Vehicle 类型的依赖时使用名为 car 的 Bean
b) 使用 Primary 注解
当你想要在多个相同类型的 Bean 中指定一个“默认”Bean 时可以使用 Primary 注解。当存在多个 Bean 且其中一个被标记为 PrimarySpring 会优先注入这个 Bean。
Component
Primary
public class Car implements Vehicle {Overridepublic void performService() {System.out.println(Servicing a car);}
}Component
public class Bike implements Vehicle {Overridepublic void performService() {System.out.println(Servicing a bike);}
}Component
public class VehicleService {Autowiredprivate Vehicle vehicle; // 默认注入 Primary 标记的 Beanpublic void service() {vehicle.performService();}
}在这个例子中Car 类被标记为 Primary因此它会被默认注入到 VehicleService 中除非使用 Qualifier 明确指定其他 Bean。
c) 使用特定方法命名或 Bean 注解中的名称
在 Java 配置类中你可以通过方法名称或在 Bean 注解中指定名称来控制 Bean 的标识符。然后可以结合使用 Autowired 和 Qualifier。
Configuration
public class AppConfig {Bean(name car)public Vehicle car() {return new Car();}Bean(name bike)public Vehicle bike() {return new Bike();}
}然后使用 Qualifier 来指定注入哪一个。
通过这些方法你可以在 Spring 中精确控制哪个 Bean 被注入到有多个相同类型的 Bean 的情况下从而保证应用的正确性和灵活性。
2使用 Resource 或 Inject 注解
Resource 和 Inject 是 JSR-250 和 JSR-330 的标准 Java 注解分别来自 Java EE 和依赖注入规范。它们与 Autowired 类似但略有不同的注入语义和配置方式。
示例代码使用 Resource
Component
public class UserService {Resource(nameuser)private User user;public void displayUser() {System.out.println(User Name: user.getName());}
}三、 构造方法注入
这种方式是最推荐的因为它确保了所有的依赖在对象被创建之前就已经准备好了。
Component
public class UserService {private final UserRepository userRepository;Autowiredpublic UserService(UserRepository userRepository) {this.userRepository userRepository;}public void performAction() {System.out.println(Action performed with user repository.);}
}四、Setter 方法注入
这种方法适用于可选依赖或者在对象创建之后还可以更改依赖的情况
Component
public class NotificationService {private EmailService emailService;Autowiredpublic void setEmailService(EmailService emailService) {this.emailService emailService;}public void sendNotification(String message, String recipient) {emailService.sendEmail(message, recipient);}
}Component
public class EmailService {public void sendEmail(String message, String recipient) {System.out.println(Email sent to recipient with message: message);}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81518.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!