• container injection


    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) :获得该字节码对象身上的注解对象
  • 相关阅读:
    redis+nginx+tomcat故障大全
    Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
    Redis初步认识
    私有IP地址共有三个范围段
    公有云和私有云的区别
    svn安装与其服务器搭建
    datagrid后台分页js
    easyui.dialog.js
    EasyUI 另一种form提交方式
    easyui- grid前台分页
  • 原文地址:https://www.cnblogs.com/dpqq/p/10587493.html
Copyright © 2020-2023  润新知