CDI(Contexts and Dependency Injection 上下文依赖注入),是JAVA官方提供的依赖注入实现,可用于Dynamic Web Module中,先给3篇老外的文章,写得很不错

1、Java EE CDI Dependency Injection (@Inject) tutorial
2、Java EE CDI Producer methods tutorial
3、Java EE CDI bean scopes

此外,还有jboss官方的参考文档:http://docs.jboss.org/weld/reference/latest/en-US/html/

如果不想啃洋文,也可以继续往下看:

一、基本的Inject注入

1.1 在eclipse中先创建一个常规的maven Dynamic Web项目(不熟悉maven的,可以先看看这里),下面是完整的项目截图

JAVA CDI 学习(1) - @Inject基本用法

里面各package的代码,后面会给出。 项目的属性中,注意有几个属性要勾上(默认情况下,应该已经自动勾上了),如下图:

JAVA CDI 学习(1) - @Inject基本用法

上图右侧的圆圈,其实就是CDI 1.0使用的先决条件。

Pom.xml的内容如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!--
  3     JBoss, Home of Professional Open Source
  4     Copyright 2013, Red Hat, Inc. and/or its affiliates, and individual
  5     contributors by the @authors tag. See the copyright.txt in the
  6     distribution for a full listing of individual contributors.
  7 
  8     Licensed under the Apache License, Version 2.0 (the "License");
  9     you may not use this file except in compliance with the License.
 10     You may obtain a copy of the License at
 11     http://www.apache.org/licenses/LICENSE-2.0
 12     Unless required by applicable law or agreed to in writing, software
 13     distributed under the License is distributed on an "AS IS" BASIS,
 14     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15     See the License for the specific language governing permissions and
 16     limitations under the License.
 17 -->
 18 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 19     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 20     <modelVersion>4.0.0</modelVersion>
 21 
 22     <groupId>cnblogs</groupId>
 23     <artifactId>cdi-web-sample</artifactId>
 24     <version>0.0.1-SNAPSHOT</version>
 25     <packaging>war</packaging>
 26     <name>cdi-web-sample</name>
 27     <description>A starter Java EE 6 webapp project for use on JBoss AS 7 / EAP 6, generated from the jboss-javaee6-webapp archetype</description>
 28 
 29     <url>http://jboss.org/jbossas</url>
 30     <licenses>
 31         <license>
 32             <name>Apache License, Version 2.0</name>
 33             <distribution>repo</distribution>
 34             <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
 35         </license>
 36     </licenses>
 37 
 38     <properties>
 39         <!-- Explicitly declaring the source encoding eliminates the following 
 40             message: -->
 41         <!-- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered 
 42             resources, i.e. build is platform dependent! -->
 43         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 44 
 45         <!-- JBoss dependency versions -->
 46         <version.jboss.maven.plugin>7.4.Final</version.jboss.maven.plugin>
 47 
 48         <!-- Define the version of the JBoss BOMs we want to import to specify 
 49             tested stacks. -->
 50         <version.jboss.bom>1.0.7.Final</version.jboss.bom>
 51         <!-- Alternatively, comment out the above line, and un-comment the line
 52             below to use version 1.0.4.Final-redhat-4 which is a release certified to
 53             work with JBoss EAP 6. It requires you have access to the JBoss EAP 6
 54             maven repository. -->
 55         <!-- <version.jboss.bom>1.0.4.Final-redhat-4</version.jboss.bom>> -->
 56 
 57         <!-- other plugin versions -->
 58         <version.surefire.plugin>2.10</version.surefire.plugin>
 59         <version.war.plugin>2.1.1</version.war.plugin>
 60 
 61         <!-- maven-compiler-plugin -->
 62         <maven.compiler.target>1.6</maven.compiler.target>
 63         <maven.compiler.source>1.6</maven.compiler.source>
 64     </properties>
 65 
 66 
 67     <dependencyManagement>
 68         <dependencies>
 69             <!-- JBoss distributes a complete set of Java EE 6 APIs including a Bill 
 70                 of Materials (BOM). A BOM specifies the versions of a "stack" (or a collection) 
 71                 of artifacts. We use this here so that we always get the correct versions 
 72                 of artifacts. Here we use the jboss-javaee-6.0-with-tools stack (you can 
 73                 read this as the JBoss stack of the Java EE 6 APIs, with some extras tools 
 74                 for your project, such as Arquillian for testing) and the jboss-javaee-6.0-with-hibernate 
 75                 stack you can read this as the JBoss stack of the Java EE 6 APIs, with extras 
 76                 from the Hibernate family of projects) -->
 77             <dependency>
 78                 <groupId>org.jboss.bom</groupId>
 79                 <artifactId>jboss-javaee-6.0-with-tools</artifactId>
 80                 <version>${version.jboss.bom}</version>
 81                 <type>pom</type>
 82                 <scope>import</scope>
 83             </dependency>
 84             <dependency>
 85                 <groupId>org.jboss.bom</groupId>
 86                 <artifactId>jboss-javaee-6.0-with-hibernate</artifactId>
 87                 <version>${version.jboss.bom}</version>
 88                 <type>pom</type>
 89                 <scope>import</scope>
 90             </dependency>
 91         </dependencies>
 92     </dependencyManagement>
 93 
 94     <dependencies>
 95 
 96         <!-- First declare the APIs we depend on and need for compilation. All 
 97             of them are provided by JBoss AS 7 -->
 98 
 99         <!-- Import the CDI API, we use provided scope as the API is included in 
100             JBoss AS 7 -->
101         <dependency>
102             <groupId>javax.enterprise</groupId>
103             <artifactId>cdi-api</artifactId>
104             <scope>provided</scope>
105         </dependency>
106 
107         <!-- Import the Common Annotations API (JSR-250), we use provided scope 
108             as the API is included in JBoss AS 7 -->
109         <dependency>
110             <groupId>org.jboss.spec.javax.annotation</groupId>
111             <artifactId>jboss-annotations-api_1.1_spec</artifactId>
112             <scope>provided</scope>
113         </dependency>
114 
115         <!-- Import the JAX-RS API, we use provided scope as the API is included 
116             in JBoss AS 7 -->
117         <dependency>
118             <groupId>org.jboss.spec.javax.ws.rs</groupId>
119             <artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
120             <scope>provided</scope>
121         </dependency>
122 
123         <!-- Import the JPA API, we use provided scope as the API is included in 
124             JBoss AS 7 -->
125         <dependency>
126             <groupId>org.hibernate.javax.persistence</groupId>
127             <artifactId>hibernate-jpa-2.0-api</artifactId>
128             <scope>provided</scope>
129         </dependency>
130 
131         <!-- Import the EJB API, we use provided scope as the API is included in 
132             JBoss AS 7 -->
133         <dependency>
134             <groupId>org.jboss.spec.javax.ejb</groupId>
135             <artifactId>jboss-ejb-api_3.1_spec</artifactId>
136             <scope>provided</scope>
137         </dependency>
138 
139         <!-- JSR-303 (Bean Validation) Implementation -->
140         <!-- Provides portable constraints such as @Email -->
141         <!-- Hibernate Validator is shipped in JBoss AS 7 -->
142         <dependency>
143             <groupId>org.hibernate</groupId>
144             <artifactId>hibernate-validator</artifactId>
145             <scope>provided</scope>
146             <exclusions>
147                 <exclusion>
148                     <groupId>org.slf4j</groupId>
149                     <artifactId>slf4j-api</artifactId>
150                 </exclusion>
151             </exclusions>
152         </dependency>
153 
154         <!-- Import the JSF API, we use provided scope as the API is included in 
155             JBoss AS 7 -->
156         <dependency>
157             <groupId>org.jboss.spec.javax.faces</groupId>
158             <artifactId>jboss-jsf-api_2.1_spec</artifactId>
159             <scope>provided</scope>
160         </dependency>
161 
162         <!-- Now we declare any tools needed -->
163 
164         <!-- Annotation processor to generate the JPA 2.0 metamodel classes for 
165             typesafe criteria queries -->
166         <dependency>
167             <groupId>org.hibernate</groupId>
168             <artifactId>hibernate-jpamodelgen</artifactId>
169             <scope>provided</scope>
170         </dependency>
171 
172         <!-- Annotation processor that raising compilation errors whenever constraint 
173             annotations are incorrectly used. -->
174         <dependency>
175             <groupId>org.hibernate</groupId>
176             <artifactId>hibernate-validator-annotation-processor</artifactId>
177             <scope>provided</scope>
178         </dependency>
179 
180         <!-- Needed for running tests (you may also use TestNG) -->
181         <dependency>
182             <groupId>junit</groupId>
183             <artifactId>junit</artifactId>
184             <scope>test</scope>
185         </dependency>
186 
187         <!-- Optional, but highly recommended -->
188         <!-- Arquillian allows you to test enterprise code such as EJBs and Transactional(JTA) 
189             JPA from JUnit/TestNG -->
190         <dependency>
191             <groupId>org.jboss.arquillian.junit</groupId>
192             <artifactId>arquillian-junit-container</artifactId>
193             <scope>test</scope>
194         </dependency>
195 
196         <dependency>
197             <groupId>org.jboss.arquillian.protocol</groupId>
198             <artifactId>arquillian-protocol-servlet</artifactId>
199             <scope>test</scope>
200         </dependency>
201 
202     </dependencies>
203 
204     <build>
205         <!-- Maven will append the version to the finalName (which is the name 
206             given to the generated war, and hence the context root) -->
207         <finalName>${project.artifactId}</finalName>
208         <plugins>
209             <plugin>
210                 <artifactId>maven-war-plugin</artifactId>
211                 <version>${version.war.plugin}</version>
212                 <configuration>
213                     <!-- Java EE 6 doesn't require web.xml, Maven needs to catch up! -->
214                     <failOnMissingWebXml>false</failOnMissingWebXml>
215                 </configuration>
216             </plugin>
217             <!-- The JBoss AS plugin deploys your war to a local JBoss AS container -->
218             <!-- To use, run: mvn package jboss-as:deploy -->
219             <plugin>
220                 <groupId>org.jboss.as.plugins</groupId>
221                 <artifactId>jboss-as-maven-plugin</artifactId>
222                 <version>${version.jboss.maven.plugin}</version>
223             </plugin>
224         </plugins>
225     </build>
226 
227     <profiles>
228         <profile>
229             <!-- The default profile skips all tests, though you can tune it to run 
230                 just unit tests based on a custom pattern -->
231             <!-- Seperate profiles are provided for running all tests, including Arquillian 
232                 tests that execute in the specified container -->
233             <id>default</id>
234             <activation>
235                 <activeByDefault>true</activeByDefault>
236             </activation>
237             <build>
238                 <plugins>
239                     <plugin>
240                         <artifactId>maven-surefire-plugin</artifactId>
241                         <version>${version.surefire.plugin}</version>
242                         <configuration>
243                             <skip>true</skip>
244                         </configuration>
245                     </plugin>
246                 </plugins>
247             </build>
248         </profile>
249 
250         <profile>
251             <!-- An optional Arquillian testing profile that executes tests in your 
252                 JBoss AS instance -->
253             <!-- This profile will start a new JBoss AS instance, and execute the 
254                 test, shutting it down when done -->
255             <!-- Run with: mvn clean test -Parq-jbossas-managed -->
256             <id>arq-jbossas-managed</id>
257             <dependencies>
258                 <dependency>
259                     <groupId>org.jboss.as</groupId>
260                     <artifactId>jboss-as-arquillian-container-managed</artifactId>
261                     <scope>test</scope>
262                 </dependency>
263             </dependencies>
264         </profile>
265 
266         <profile>
267             <!-- An optional Arquillian testing profile that executes tests in a remote 
268                 JBoss AS instance -->
269             <!-- Run with: mvn clean test -Parq-jbossas-remote -->
270             <id>arq-jbossas-remote</id>
271             <dependencies>
272                 <dependency>
273                     <groupId>org.jboss.as</groupId>
274                     <artifactId>jboss-as-arquillian-container-remote</artifactId>
275                     <scope>test</scope>
276                 </dependency>
277             </dependencies>
278         </profile>
279 
280         <profile>
281             <!-- When built in OpenShift the 'openshift' profile will be used when 
282                 invoking mvn. -->
283             <!-- Use this profile for any OpenShift specific customization your app 
284                 will need. -->
285             <!-- By default that is to put the resulting archive into the 'deployments' 
286                 folder. -->
287             <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
288             <id>openshift</id>
289             <build>
290                 <plugins>
291                     <plugin>
292                         <artifactId>maven-war-plugin</artifactId>
293                         <version>${version.war.plugin}</version>
294                         <configuration>
295                             <outputDirectory>deployments</outputDirectory>
296                             <warName>ROOT</warName>
297                         </configuration>
298                     </plugin>
299                 </plugins>
300             </build>
301         </profile>
302 
303     </profiles>
304 </project>
pom.xml

相关文章: