注入(injector)

注入(injector)

      在java开发中有时候我们的一个类需要依赖另外一个类,这种就是依赖关系,创建对象的工作一般由spring容器来完成然后注入给调用者,这种就是依赖注入

       Java依赖注入设计原则允许我们移除硬编码依赖和让我们的应用低耦合,可扩展和可维护。我们可以通过在Java中实现依赖注入将依赖关系从编译时移到运行时来解析。 Java依赖注入似乎很难通过理论来掌握。所以我将通过一些简单的例子,然后我们将会看到如何在应用里使用依赖注入模式来实现低耦合和可扩展性。
       一个最好的setter依赖注入的例子是 Struts2 Servlet API Aware interfaces 到底是使用基于构造器依赖注入还是基于setter方法依赖注入取决于你的需求。举个例子,如果没有服务类我的应用完全不能运行,那么我会偏向基于构造器的DI,否则我会选择基于setter方法的DI,只有在真正需要才会使用它。 Java中的依赖注入是一种通过使对象从编译时绑定移到运行时绑定来实现控制反转(Inversion of control IoC)的一种方式。我们可以通过工厂模式(Factory Pattern), 模板方法设计模式(Template Method Design Pattern), 策略模式(Strategy Pattern)还有服务定位模式(Service Locator pattern)来实现IoC。 Spring依赖注入,Google Guice还有Java EE CDI框架通过使用Java Reflection API和Java注解来促进依赖注入的过程。我们只需要注解该域,构造器或者setter方法然后在配置xml文件或者配置类中配置它们。

     Java依赖注入的好处 一些使用Java依赖注入的好处如下:关注点分离 应用程序类中的样板代码减少,因为所有用于初始化依赖性的工作都由注入器组件处理 配置组件使应用程序易扩展 通过模拟对象来单元测试会很简单 Java依赖注入的缺点

     Java依赖注入也有一些缺点: 如果过度使用,可能会导致维护问题,因为更改的影响只有在运行时才知道。 Java中的依赖注入可能会隐藏导致运行时错误的服务类的依赖性,这会在编译时被捕获。 以上就是Java中的依赖注入模式。当我们控制服务时,了解和使用它是很好的。

    (ps:常用注入

posted @ 2019-03-12 14:53 .知寒 阅读( ...) 评论( ...) 编辑 收藏
### 使用 Injector 进行 Session 的依赖注入 在现代应用程序开发中,依赖注入框架如 Guice 可以简化对象之间的依赖管理。对于 `Session` 对象的依赖注入,可以通过配置模块并利用 `@Inject` 注解来实现。 #### 配置 Module 类 首先,需要创建一个自定义模块类用于绑定 `Session` 实例到特定的作用域: ```java import com.google.inject.AbstractModule; import javax.inject.Singleton; public class SessionModule extends AbstractModule { protected void configure() { bind(Session.class).toProvider(SessionProvider.class).in(Singleton.class); } } ``` 这里绑定了 `Session` 接口至 `SessionProvider` 提供者,并指定了单例作用域[^1]。 #### 创建 Provider 类 接着,编写提供者的具体实现,负责返回实际的 `Session` 实例: ```java import com.google.inject.Provider; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class SessionProvider implements Provider<Session> { private final SessionFactory sessionFactory; public SessionProvider() { this.sessionFactory = new Configuration().configure().buildSessionFactory(); } @Override public Session get() { return sessionFactory.openSession(); } } ``` 此部分初始化了 Hibernate 的 `SessionFactory` 并提供了打开新 `Session` 的方法。 #### 应用程序入口设置 最后,在应用启动时安装上述模块以便让 Guice 知道如何处理带有 `@Inject` 注解标注的 `Session` 字段或参数: ```java import com.google.inject.Guice; import com.google.inject.Injector; public class MainApp { public static void main(String[] args) { Injector injector = Guice.createInjector(new SessionModule()); // 获取服务实例... } } ``` 当其他组件声明它们需要 `Session` 作为其构造函数的一部分或是成员变量时,Guice 将自动调用 `SessionProvider#get()` 方法为其分配合适的实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值