Context Depedency Injection(一)
来源:互联网 发布:数据库怎么加密 编辑:程序博客网 时间:2024/05/16 15:19
一、概述
CDI是JavaEE6中对java 依赖注入控制反转以及面向切面编程提出的新的标准和规范。CDI受流行的依赖注入(DI)和面向切面编程的影响,各种实现没有统一的规范,需要有这么一套标准或者规范去约束java在DI和AOP方面的编程,目的是将来可以在这基础上继续定制统一的规范和标准。DI和Aop作为许多java 框架的基础,CDI的出现会使得他们成为更高一级技术标准和规范的基础。
这篇文章主要讨论依赖注入和控制反转,文中涉及到了许多CDI的新特性,如类型安全、CDI alternatives 等等。这篇教程分为两部分,第一部分主要是依赖注入的基础如@Inject,@Porduces及@Qualifiers等注解标签,第二部分主要是一些高级的讨论话题,如如何创建课插拔的实例化组件及一些注解处理配置等等。
二、应用CDI的好处
CDI 作为Java EE 6面向切面编程的基础,很快就被各种企业级应用服务器支持,如Caucho 的 Resin,IBM的 WebSphere 及Oracle的Glassfish,红帽公司的Jboss还有一些其他的应用服务器。CDI跟spring及谷歌的Guice框架中的DI 和Aop 相似。就像JPA是ORM的规范一样,CDI声明规定了DI和Aop开发的接口。如果你曾经使用过spring和Guice框架,你会发现CDI学起来和用起来都很简单。然而你刚刚接触依赖注入概念的话,那么CDI将是你快速学习依赖注入的基石。
CDI也可以单独被使用在任何框架中集成到各种应用中。
依赖注入(DI)是指处理过程向软件提供一个外部依赖组件,这能帮助你的代码架构上解耦,减少对象间的直接依赖关系。
这样设计的目的是在接口设计以及测试驱动开发通过提供一个一致的方式注入依赖项。例如,一个数据访问对象(DAO)依赖注入于一个数据库连接,而不是与JNDI查找数据库连接。
考虑像CDI, DI框架的一个方法是使用JNDI去依赖查找注入,而不是一个对象查找其他对象,它需要完成工作(依赖性),DI容器再注入依赖对象。这就是所谓的好莱坞原则,“别叫我们‚”(查找对象),“我们会打电话给你”(注入对象)。
如果你曾开发过crc cards应用,就能想到的依赖作为一个合作者。合作者是一个对象,另一个对象需要执行的角色,就像一个DAO(数据访问对象)需要一个JDBC连接对象。
三、CDI 编程步骤
使用CDI编程需要做以下几步
1.在META-INF资源文件下创建空的bean.xml文件
2.在需要注入依赖的类中相应的setter方法上添加@Inject注解
3.使用@Default注解相应的类文件
4.使用@Alternative注解相应的可选择属性
5.使用CDI对象管理容器查找相应的对象
四、实例
1.创建web项目,在META-INF资源文件下创建空bean.xml
CDI实现需要在你的jar文件或者classpath或者web应用的WEB-INF文件路径下的META-INF路径下创建bean.xml文件。bean.xml文件可以是空文件,如果你的war包或者是jar包中没有bean.xml文件,则他们不会被CDI管理起来。负责CDI会自动扫描相应的war包或者jar 包中的bean.xml是否为空。
代码示例
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/beans_1_0.xsd"></beans>
2.创建servlet,命名为CDIServlet。在CDIServlet中的set方法中添加@Inject注解。
@Inject注解用来标记需要依赖注入的地方。@Inject标签可以用在属性上,构造方法上及set方法上。在这个例子中我们用在set方法上。
代码示例
package com.zhouxiang;import java.io.IOException;import javax.inject.Inject;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class CDITest */public class CDITest extends HttpServlet {private static final long serialVersionUID = 1L; @Inject private Test1 test; /** * @see HttpServlet#HttpServlet() */ public CDITest() { super(); // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoPost(request,response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("dsfsdfsd");test.test(); }}
3.创建Test1类,并标注默认注入标签@Default
package com.zhouxiang;import javax.enterprise.inject.Default;import javax.inject.Inject;import javax.inject.Named;@Defaultpublic class Test1 {public void test() {System.out.println("hello inject!"); }}
0 0
- Context Depedency Injection(一)
- SQL Injection:(一)
- 超简单Spring入门(一)Dependency Injection
- spring 随笔(一) bean & Dependency Injection
- Context详解(一)
- 关于Context(一)
- component and context programming一
- android 学习一: Context 类
- iOS Context 基础教程 (一)
- 面试一:Context 的理解
- 轻松学习Spring<一> IoC容器和Dependency Injection模式
- 【软件安全】cwe-89 SQL Injection(一)
- Android深入理解Context(一)Context关联类和Application Context创建过程
- Android中Context源码分析(一)
- 小博老师浅谈Context(一)
- Android context的理解(一)
- spring学习 一 <context:component-scan>使用说明
- Context
- Transferring Data Without Draining the Battery - Redundant Downloads are Redundant
- Qt QML动画概述
- 【Jsp】使用Post与Get正确传递表单信息与乱码问题
- 编译出现错误:linker command failed with exit code 1
- iphone与google日历同步-VPN方法
- Context Depedency Injection(一)
- 并发控制 mysql InnoDB锁表,事务及处理方法
- 勇做垦绿IT人
- Windows Live Writer测试博客
- AwesomeText
- Java Algorithm Learning Summary
- windows下redis下载安装
- build_native.sh文件记录(2)
- F.NET框架示例(五)、数据库操作 之 修改