首页 > 其他 > 详细

container injection

时间:2019-03-24 12:25:31      阅读:129      评论:0      收藏:0      [点我收藏+]

J2EE中容器充当中间件的角色。主要的容器包括:

WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。

EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。

 

注解

注解就是符合一定格式的语法 @xxxx,是给jvm看的,给机器看的。注解在目前而言最主流的应用是代替配置文件。

关于配置文件与注解开发的优缺点:

  • 优点:开发效率高,成本低
  • 缺点:耦合性大,并且不利于后期维护

jdk5提供的注解

@Override:告知编译器此方法是覆盖父类的

@Deprecated:标注过时

@SuppressWarnings:压制警告

不同的注解只能在不同的位置使用(方法上、字段上、类上)

自定义注解

怎样去编写一个自定义的注解,使用@interface关键字。

public @interface MyAnno {
    //注解的属性
    String name();
    int age() default 28;
}

怎样去使用注解

技术分享图片
 @MyAnno(name="",age=20)
    public  void  show(){
    }

    @MyAnno(name="")
    public  void  show1(){
    }
技术分享图片

注意:如果属性的名字是value,并且注解的属性值只有一个,那么在使用注解时可以省略value。注解属性类型只能是以下几种:基本类型;String;枚举类型;注解类型;Class类型 ;以上类型的一维数组类型。

public @interface MyAnno2 {
    //String value();
   String[]value(); }
技术分享图片
    //@MyAnno2("aa")
    //public  void  show2(){
    //}
    @MyAnno3({"name","age"})
    public  void  show3(){

    }
技术分享图片

怎样去解析注解-----使用反射知识

介入一个概念,元注解。代表修饰注解的注解,作用是限制定义的注解的特性。
@Retention

  • SOURCE: 注解在源码级别可见,在字节码文件中就没有了。
  • CLASS:注解在字节码文件级别可见
  • RUNTIME:注解在整个运行阶段都可见

技术分享图片

@Target 代表注解修饰的范围:类上使用,方法上使用,字段上使用

  • FIELD:字段上可用此注解
  • METHOD:方法上可以用此注解
  • TYPE:类/接口上可以使用此注解
技术分享图片
import java.lang.reflect.Method;

/**
 * Created by Administrator on 2017/7/28.
 */
public class MyAnnoParse {
    public static void main(String[]args) throws NoSuchMethodException {

        //解析show方法上面的@MyAnno
        //直接的目的是 获得show方法上的@MyAnno中的参数

        //获得show方法的字节码对象
        Class clazz = MyAnnoTest.class;
        Method method = clazz.getMethod("show", String.class);
        //获得show方法上的@MyAnno
        MyAnno annotation = method.getAnnotation(MyAnno.class);
        //获得@MyAnno上的属性值
        System.out.println(annotation.name());//zhangsan
        System.out.println(annotation.age());//28

        //根据业务需求写逻辑代码
    }
}
技术分享图片

注意:要想解析使用了注解的类 ,那么该注解的Retention必须设置成Runtime,注解解析的实质是从注解中解析出属性值

字节码对象存在于获得注解相关的方法

isAnnotationPresent(Class<? extends Annotation> annotationClass) : 判断该字节码对象身上是否使用该注解了
getAnnotation(Class<A> annotationClass) :获得该字节码对象身上的注解对象

container injection

原文:https://www.cnblogs.com/dpqq/p/10587493.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!