A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 2018-6-5 11:40 编辑

1.1 上次课内容回顾:
[AppleScript] 纯文本查看 复制代码
Listener        :
    * 监听器就是一个JavaBean用来监听其他Bean变化.
    * 事件源:被监听的对象.
    * 监听器:监听的对象.
    * 事件源与监听器的绑定:
    * 事件:事件源改变.通过事件对象获得事件源对象.
    * Servlet的监听器:
        * 事件源:三个域对象.ServletContext,HttpSession,ServletRequest
    * 三类:
        * 一类:监听三个域对象的创建和销毁的监听器.
        * 二类:监听三个域对象的属性变更监听器.
        * 三类:监听HttpSession中的JavaBean的状态的改变的监听器.
Filter                :
    * 过滤器就是对从客服端发送到服务器的请求进行过滤的.
    * FilterConfig:过滤器配置.
        * 获得初始化参数
        * 获得ServletContext
        * 获得过滤器的名称
   * FilterChain:过滤器链.
   * 生命周期:服务器启动的时候进行创建,服务器关闭的时候销毁.
   * 过滤器的配置:
        * <url-pattern>的配置
        * <servlet-name>的配置
        * <dispatcher>的配置:
            * REQUEST
            * FORWARD
            * INCLUDE
            * ERROR
   * 自动登录:
   * 网站乱码的解决:
1.2 案例一:使用自定义注解完成@Test注解功能类似的效果:1.2.1 需求
使用Junit是单元测试的工具.在一个类中使用 @Test 对程序中的方法进行测试.
自定义一个注解@MyTest 也将这个注解加在类的方法上. 使这个方法得到执行.
1.2.2 分析:1.2.2.1 技术分析:
Ø 【注解】
程序中有 注释 和注解
* 注释:给开发人员.
* 注解:给计算机看的.
注解使用:学习框架支持注解开发.
Ø 【JDK提供的注解】
@Override                        :描述方法的重写.
@SuppressWarnings        :压制警告.
@Deprecated                        :标记过时.
Ø 自定义注解:
定义一个类:class
定义一个借口:interface
定义一个枚举:enum
定义一个注解:@interface
【自定义注解案例】
[AppleScript] 纯文本查看 复制代码
@interface MyAnno1{
       
}
带有属性的注解:
@interface MyAnno2{
        int a() default 1;
        String b();
        // 注解属性的类型:基本数据类型,字符串类型String,Class,注解类型,枚举类型,以及以上类型的一维数组.
        // Date d();
        Class clazz();
        MyAnno3 m3(); // 注解
        Color c(); // 枚举
        String[] arrs();
       
}
@MyAnno4("aaa") // 如果属性名称为value 那么使用的时候 value可以省略(只出现这一个value的属性情况下).
public class AnnotationDemo3 {
}
@interface MyAnno4{
        String value();
        int a() default 1;
}
1.2.2.2 步骤分析:
定义一个测试类
public class AnnotationDemo3 {
        @MyTest
        public void demo1(){
                System.out.println("demo1执行了...");
        }
        
        @MyTest
        public void demo2(){
                System.out.println("demo2执行了...");
        }
        
        public void demo3(){
                System.out.println("demo3执行了...");
        }
}
定义核心运行类:
在核心运行类中有一个主函数:
获得测试类中的所有的方法.
获得每个方法,查看方法上是否有@MyTest注解.
如果有这个注解,让这个方法执行.
1.2.3 代码实现:
[AppleScript] 纯文本查看 复制代码
通过元注解定义注解存在的阶段.
* 元注解也是一个注解:修饰注解的 注解.
自定义一个注解:
核心运行类:
public class CoreRunner {
        public static void main(String[] args) {
                // 反射:获得类的字节码对象.Class
                Class clazz = AnnotationDemo3.class;
                // 获得测试类中的所有的方法:
                Method[] methods = clazz.getMethods();
                // 遍历数组:
                for (Method method : methods) {
                        // System.out.println(method.getName());
                        // 判断方法上是否有@MyTest注解:
                        boolean flag = method.isAnnotationPresent(MyTest.class);
                        // System.out.println(method.getName()+"   "+flag);
                        if(flag){
                                // 让这个方法执行:
                                try {
                                        method.invoke(clazz.newInstance(), null);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                }
        }
}
1.2.4 总结:
[AppleScript] 纯文本查看 复制代码
使用注解完成JDBC工具类的编写:(了解)
public class JDBCUtils {
        private static  String driverClass;
        private static  String url;
        private static  String username;
        private static  String password;
       
        @JDBCInfo
        public static Connection getConnection() throws Exception{
                // 反射:
                Class clazz = JDBCUtils.class;
               
                Method method = clazz.getMethod("getConnection", null);
               
                // 获得方法上的注解:
                JDBCInfo jdbcInfo = method.getAnnotation(JDBCInfo.class);
                driverClass = jdbcInfo.driverClass();
                url = jdbcInfo.url();
                username = jdbcInfo.username();
                password = jdbcInfo.password();
               
                Class.forName(driverClass);
                Connection conn = DriverManager.getConnection(url, username, password);
               
                return conn;
        }
}

1 个回复

倒序浏览
感谢分享

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马