
J2EE CDI技术
文章平均质量分 80
J2EE标准技术之一的Context and Dependency Injection。上下文与依赖注入技术。
疯狂的建波
喜欢编程,喜欢J2EE
展开
-
CDI进阶第十步 查找上下文
这个技术就是用在这么一种情况下。比如我一个接口,有N个实现,但是我有个需求,我需要遍历所有的实现类。怎么办?这就需要介绍下自己讲过的Instance接口了。这个可以泛型的接口本身是继承了Iterable接口的。所以说可以for each循环啊。\比如这个接口package com.srchy.cdilookup; public interface HelloInterface {原创 2016-01-12 17:13:16 · 54760 阅读 · 0 评论 -
CDI进阶第九步 模板注解
模板就是利用现有的注解去开发新的注解。比如一个类上面加了太多注解,很烦,这时候可以合并为一个注解。比如CDI自带的@Model注解,其实就是合并了@RequestScoped注解和@Named注解那么我们也可以定义一个注解来合并@SessionScoped和@Named其实开发步骤很简单在你的自定义注解上加上@Stereotype注解,然后在这个注解上加上你要合并的注解。比原创 2016-01-12 16:26:46 · 50065 阅读 · 0 评论 -
CDI进阶第八步 CDI初始化与销毁事件
其实这就是两个注解的问题@Initialized注解@Destroyed注解这两个注解都有两重作用,一是加上字段上用来设置注入的事件对象类型。二是在观察者类中,加在观察方法参数上,用来指定观察的事件内容。首先看它的第一重作用package cdilifeevent; import java.time.LocalDateTime; import javax.annot原创 2016-01-12 15:31:13 · 54664 阅读 · 0 评论 -
CDI进阶第七步 注入内置对象
这个技术是什么意思呢?就是说CDI可以注入一些容器自带的东西。比如强大的HttpServletRequest.试想一下,如果CDI不能注入系统自带的资源,比如JPA持久化上下文,那么CDI技术有何意义?现在的web项目大都是要操作数据库的。但是JPA的持久化上下文,它本身是用JNDI进行管理的。我先写个EJB自动注入HttpServletRequest的例子。至于CDI的例子也一样原创 2016-01-12 13:50:28 · 55050 阅读 · 0 评论 -
CDI进阶第六步 CDI装饰模式
CDI的装饰模式有两个十分重要的注解。@Decorator与@Delegate@Decorator加上类上面,表示这个类是一个装饰器类。@Delegate加上在装饰器的字段上面,用来注入被装饰的对象。装饰类和被装饰对象实现同一个接口,实现装饰。首先写一个接口。package cdidecorator; public interface HelloInterface { St原创 2016-01-12 10:59:26 · 55008 阅读 · 0 评论 -
CDI进阶第五步 CDI事件
其实CDI的事件相当之简单。只需要一个注解就够了。知识点只有两个:1 @Observes注解2 Event接口正确的做法是写一个观察者类,在观察者类中的观察方法参数里加上@Observes注解就可以了。我们先写一个CDI管理的BEAN。package com.rschy.cdievent; import javax.enterprise.context.RequestS原创 2016-01-11 17:03:27 · 55258 阅读 · 1 评论 -
CDI进阶第四步 自定义注解验证
对于复杂的实际应用,系统自带的验证注解是不够的。系统自带验证注解在Javax.validation.constraints包下。只有最大值,最小值之类的验证。虽然说内建验证支持正则表达式,但是还是远远不够的。J2EE的验证技术支持各种验证,有扩展内建验证注解,或者说是扩展已有验证注解(包括你自己定义的验证注解)。核心知识点就在于这个注解@Constraint。当然一个注解要成为原创 2016-01-11 15:57:03 · 54878 阅读 · 0 评论 -
CDI进阶第三步 CDI验证器
CDI进阶第三步 验证器验证的需求在实际的应用开发中经常用到,比如对EMAIL进行验证,对手机号码进行验证等等。我这里用一个简单的DEMO来讲下怎样使用J2EE的验证技术。J2EE的验证技术很通用,不止在CDI可以用,而且在EJB,JPA都可以使用。为了简单起见,我们先使用J2EE内建的注解来进行验证。先写个简单的CDI BEAN。 package cdivalidat原创 2016-01-11 14:32:28 · 49900 阅读 · 0 评论 -
CDI进阶第二步 自定义注解拦截器
CDI进阶第二步 自定义注解拦截器上一步讲到了拦截器,我们的配置是这样的,加注解@Interceptors({Interceptor1.class,...})。这样确实烦啊。幸好J2EE提供了这样一种机制,自定义注解。写起来就是这样的,比如自定义的注解为@Hello,就可以直接在类上加@Hello注解。在类上加注解是拦截所有方法,只在方法上加,就仅仅会拦截这一个方法。自定义注解,需原创 2016-01-11 11:28:55 · 50497 阅读 · 0 评论 -
CDI进阶第一步 CDI拦截器
CDI进阶第一步 CDI拦截器CDI对象做拦截器,其实就是几个关键的注解。@Interceptors@AroundInvoke这两个注解十分关键。还有两个概念,目标类与拦截器类。目标类就是我们的CDI对象。拦截器类就是控制目标类运行的拦截器,这个非常好理解。@AroundInvoke是加上目标类上,或者是目标类的某个方法上。而@AroundInvoke是加在拦截器的原创 2016-01-09 11:19:22 · 50278 阅读 · 0 评论 -
CDI技术第十步 给Bean取名字
CDI技术第十步 给Bean取名字Spring可以给Bean取名字,EJB也可以。那么我们的CDI可以吗?答案肯定是可以的!核心注解是@Named加在类上,可以指定名字,也可以不指定。如果不指定,默认名字就是类名首字母小写。我们可以写个例子,一个接口,两个实现类。package com.rschy.cdiname; public interface Greeting原创 2016-01-08 15:59:06 · 49690 阅读 · 0 评论 -
CDI技术第九步 构造注入与setter注入
CDI技术第九步 构造注入与setter注入构造器注入和setter注入其实都很简单,有过spring基础的人都会玩。但在这里我还是不厌其烦的写点代码试验试验。我写个简单,构造器注入一个数字a,setter方法注入一个数字b,然后完成相加。package com.rschy.cdiinject; import java.util.Random; import javax原创 2016-01-08 15:24:13 · 49632 阅读 · 0 评论 -
CDI技术第八步 动态CDI BEAN
CDI技术第八步 动态BEAN动态Bean是什么意思呢?就是我在运行的时候获得动态的东西。如果按我们之前将的方式来做。获得的对象并不是动态的。因为注解加在了类上面,所以在运行时期就是这个实现类,并不能改变。动态的关键技术就是注解加上方法上,获得的Bean是方法的返回值。既然是方法,那么方法里就可以写各种代码来实现了。这就是动态。我们可以模拟一个卖饮料的例子。随机提供实现饮料。这原创 2016-01-08 15:01:21 · 55179 阅读 · 0 评论 -
CDI技术第七步 生命周期管理
CDI技术第七步 生命周期管理其实生命周期的管理相当简单啊就是两个注解@PostConstruct与@PreDestroy那么我们来试一试喽package com.rschy.cdilifecycle.web; import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;imp原创 2016-01-08 14:14:35 · 65845 阅读 · 2 评论 -
CDI技术第六步:自定义选择器注解
CDI技术第六步,使用自定义注解来选择实现类我在上一篇博文中提到了如果要换实现类会非常麻烦,改注解并不是一件工作量低的活。那么我们就用自定义注解来实现吧。我们假设有这样一个应用,接口是提供汽车,实现类有两个:宝马与迷你。然后我们通过这种方式,自由地切换:@Inject@BMWprivate CarService service;当加上宝马注解时就能获取到宝马,加上迷原创 2016-01-08 13:39:06 · 49785 阅读 · 0 评论 -
CDI技术第五步,选择注入的实现类
CDI技术第五步,使用选择器我们开发过程中往往会遇到这样一个场景。就是对于一个接口,我们写了多个实现类,但是毫无疑问,我们只能使用一个实现类。那么这个怎么实现呢?这就需要两个个注解了。@Default注解与@Any注解比如我写一个接口。package cdiscope.bean; public interface InfoService { String i原创 2016-01-08 12:45:19 · 49951 阅读 · 0 评论 -
CDI技术第四步,依赖作用域与作用域总结
CDI技术第四步:依赖作用域Dependent作用域是比request作用域还小的作用域,都不能保证每个request内的唯一。简单地说就是要一个就new一个。我简单地举个例子。这个是servletpackage cdiscope.web; import java.io.IOException; import javax.inject.Inject;import原创 2016-01-08 12:14:16 · 50198 阅读 · 0 评论 -
CDI技术第三步,对话作用域
对话作用域对话作用域需要用到一个很关键的接口,javax.enterprise.context.Conversation。默认情况下,对话作用域是跟RequestScope一样的,也就是来一个HTTP请求,就新建一个对象。请求结束,对象也终结了。那么要如何才能传给下一个请求呢?需要做两件事情1 将对话设置为开始,也就是对话状态由临时对话设置为长时间对话。这个需要调用java原创 2016-01-08 11:53:48 · 49902 阅读 · 1 评论 -
CDI学习第二步,BEAN作用域
CDI技术第二步,范围注解CDI管理的Bean,有范围区别的。主要有以下范围1 request范围,也就是对于每个web请求,会新建一个对象。注解使用@RequestScoped2 session范围,意思是对于每个web会话,会新建一个对象。注解使用@SessionScoped3 application范围,对于每个web应用,维护一个对象注解使用@ApplicationSc原创 2016-01-08 01:30:41 · 50492 阅读 · 0 评论 -
CDI技术第一步 Hello World!
CDI技术J2EE 7的CDI技术可以实现自动装配。我现在的这次实践就是看看能自动到什么地步。我开始是只在servlet中加了Inject注解的。但是发现没用。实现类一定要加上@RequestScoped注解当然除了@RequestScoped之外还有@Dependent。使用@Produces注解可以使一个方法的返回值变成一个CDI Bean。当然这需要注解。废话原创 2016-01-08 00:05:27 · 68935 阅读 · 2 评论