Java EE企业级项目开发JavaEE单元6 任务2 勤查询设计

上传人:仙*** 文档编号:47325149 上传时间:2021-12-20 格式:PPT 页数:41 大小:1.40MB
返回 下载 相关 举报
Java EE企业级项目开发JavaEE单元6 任务2 勤查询设计_第1页
第1页 / 共41页
Java EE企业级项目开发JavaEE单元6 任务2 勤查询设计_第2页
第2页 / 共41页
Java EE企业级项目开发JavaEE单元6 任务2 勤查询设计_第3页
第3页 / 共41页
点击查看更多>>
资源描述
Struts2+Hibernate+SpringJavaEE 企业级项目开发单元六 考勤管理任务2 考勤查询设计1任务简介任务简介2任务分析任务分析3相关支撑知识相关支撑知识4任务小结任务小结目录页第1页任务2 考勤查询设计过渡页第2页过渡页任务简介任务2 考勤查询设计任务简介本本任务以考勤查询功能设计与实现为依托,主要内容:p学习Spring AOP中的Pointcut与Advisor;p理解AOP基于XML Schema的配置实现;p应用XML Schema配置设计并实现考勤查询子模块。第3页过渡页第4页过渡页任务分析任务2 考勤查询设计任务分析pSpring中的Pointcut:l定义了Advice的应用时机,相对任务1中的四种Advice,PointCut可以定义更细致的植入时机。l分为静态Pointcut、动态Pointcut和用户自定义Pointcut三种。p本任务重点:l分析静态Pointcut与动态Pointcut。l基于XML Schema的配置实现方式可以简化AOP的使用,无需编写代理类,可以重用Pointcut。第5页任务2 考勤查询设计任务分析p考勤查询:l根据用户名、开始日期、结束日期查询符合条件的考勤记录。l考勤查询同时记录查询日志信息,查询日志信息包括:用户的ID、IP地址、查询时间等。l查询日志应用基于XML Schema配置,在Spring 配置文件中配置标签,配置文件中没有设置代理对象,Spring自动设置代理对象并调用对应的方法是应用Advice。第6页过渡页第7页过渡页相关支撑知识相关支撑知识pPointcut即切入点,用于配置切面的切入位置:lSpring切入点的粒度是方法级,因此在Spring AOP中Pointcut的作用是配置哪些类中哪些方法在定义的切入点之内、哪些方法应该被过滤排除。lSpring的Pointcut分为三种:静态Pointcut:需要考虑类名、方法名动态Pointcut:除此之外,还要考虑方法的参数,以便在运行时可以动态的确定切入点的位置; 用户自定义Pointcut。第8页一Pointcut、Advisior任务2 考勤查询设计相关支撑知识pSpring中一个advisor是一个通知对象和与之关联的切入点表达式的切面。除了引入这种特殊形式,任何advisor都可以和任何通知一起工作。p org.springframework.aop.support.DefaultPointcutAdvisor是最常用的advisor类。l例如,可以和 MethodInterceptor,BeforeAdvice 或者 ThrowsAdvice一起使用。第9页一Pointcut、Advisior任务2 考勤查询设计相关支撑知识p 静态Pointcut:l 可以根据类和方法的签名,来判定那些类的哪些方法在定义的切入点之内、哪些应该被过滤排除。p 静态Pointcut的实现类:l NameMatchMethodPointcut:只能对方法名进行判别的静态Pointcut实现类;l JdkRegexpMethodPointcut:使用JDK中定义的正则表达式对方法名进行匹配的静态Pointcut实现类;l StaticMethodMatcherPointcut:抽象的静态Pointcut,不能被实例化,可以扩展该类来实现自定义的切入点。第10页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计相关支撑知识第11页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(1)NameMatchMethodPointcutl 只能对方法名进行判别的静态Pointcut实现类 pos* start pos*表示包含所有以pos开始的方法(大小写敏感)。相关支撑知识第12页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(1)NameMatchMethodPointcutl 使用NameMatchMethodPointcut匹配foo(),foo(int)和bar()方法。【例6-5】NameMatchMethodPointcut使用实例接口:INameBean.javapublic interface INameBean public void foo(); public void foo(int x);public void bar(); public void yup();接口实现类:NameBean.javapublic class NameBean implements INameBean public void foo() System.out.println(foo); public void foo(int x) System.out.println(foo + x); public void bar() System.out.println(bar); public void yup() System.out.println(yup); 相关支撑知识第13页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(1)NameMatchMethodPointcutl 使用NameMatchMethodPointcut匹配foo(),foo(int)和bar()方法。【例6-5】NameMatchMethodPointcut使用实例修改配置文件 foo bar nameAdvisor 相关支撑知识第14页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(1)NameMatchMethodPointcutl 使用NameMatchMethodPointcut匹配foo(),foo(int)和bar()方法。【例6-5】NameMatchMethodPointcut使用实例测试类:NamePointcutExample.javapublic class NamePointcutExample public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext(applicationContext.xml);INameBean nameBeanProxy=(INameBean)context.getBean(nameBeanProxy);nameBeanProxy.foo();nameBeanProxy.foo(100);nameBeanProxy.bar();nameBeanProxy.yup(); 相关支撑知识第15页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(1)NameMatchMethodPointcutl 使用NameMatchMethodPointcut匹配foo(),foo(int)和bar()方法。【例6-5】NameMatchMethodPointcut使用实例运行结果相关支撑知识第16页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(2)JdkRegexpMethodPointcutl 使用JDK中定义的正则表达式对方法名进行匹配的静态Pointcut。 .*ost .*tart .*tart .*ost正则表达式,所有以ost结尾的方法都匹配。相关支撑知识第17页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(2)JdkRegexpMethodPointcutp patterns属性:l 一个java.lang.Sring类型的数组,表示数组中所有和定义的正则表达式匹配的方法都包含在定义的切入点内。p excludedPatterns属性:l 与patterns属性相反,表示被排除于切入点范围的方法。p 和NameMatchMethodPointcut一样,也可以用ClassFilter类型的classFilter属性来定义类过滤器。 相关支撑知识第18页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(2)JdkRegexpMethodPointcutpublic class People public void speak() / 讲话 System.out.println(Hello,我是People!); public void Running() / 跑步 System.out.println(我在跑跑逃); public void Loving() / 恋爱 System.out.println(我在恋爱别来打搅我!); public void died() / 死亡 System.out.println(完了,死了); 【例6-6】JdkRegexpMethodPointcut使用实例 创建目标类:People.java相关支撑知识第19页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(2)JdkRegexpMethodPointcutpublic class LogerPeople implements MethodBeforeAdvice private static final Log log = LogFactory.getLog(LogerPeople.class); public void before(Method method, Object args, Object target) throws Throwable System.out.println(target.getClass().getSimpleName() + 正在 + method.getName()+ !); 【例6-6】JdkRegexpMethodPointcut使用实例创建一个类名:LogerPeople.java实现MethodBeforeAdvice接口相关支撑知识第20页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(2)JdkRegexpMethodPointcutpublic class TestMain public static void main(String args) ApplicationContext context = new FileSystemXmlApplicationContext( src/com/my/test/spring.xml); /通过ProxyFactoryBean获取IComputer接口实现类的实例 People people = (People) context.getBean(ProxyFactoryBean); people.speak(); people.Running(); people.Loving(); people.died(); 【例6-6】JdkRegexpMethodPointcut使用实例创建含主方法的测试类TestMain.java相关支撑知识第21页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(2)JdkRegexpMethodPointcut .*spea.* .*ing .*di.* 【例6-6】JdkRegexpMethodPointcut使用实例编写Spring配置文件 DefaultAdvisor l“.*spea.*”表示所有名字以spea开头的方法,例子中是指speak方法;l“.*ing”表示所有名字以ing结束的方法,例子中是指Running和Loving方法;l“.*di.*”表示所有名字以di开头的方法,例子中是指died方法;l“.*Run.*”表示所有名字以Run开头的方法,例子中是指Running方法。相关支撑知识第22页静态Pointcut1 1一Pointcut、Advisior任务2 考勤查询设计(2)JdkRegexpMethodPointcut【例6-6】JdkRegexpMethodPointcut使用实例运行结果l People类中的speak、Loving、died方法已经被拦截;l 但Running方法却没有拦截,因为在JdkRegexpMethodPointcut中指定其excludedPattern属性把它排除在切入点之外的缘故。相关支撑知识p Spring中提供了以下几种动态切入点的实现:l ControlFlowPointcut:控制流程切入点 如只有在某个特定的类或方法中调用某个连接点时,装备才会被触发,这时就可以使用ControlFlowPointcut; 它的系统开销很大,在追求高效的应用中,不推荐使用。l DynamicMethodMatcherPointcut:动态方法匹配器 是抽象类,扩展该类可以实现自己的动态Pointcut。第23页动态Pointcut2 2一Pointcut、Advisior任务2 考勤查询设计相关支撑知识第24页动态Pointcut2 2一Pointcut、Advisior任务2 考勤查询设计(1)DynamicMethodMatcherPointcut【例6-7】DynamicMethodMatcherPointcut使用实例l 通知foo()方法并且仅仅希望当传递给方法int参数等于100时对方法进行通知 接口:ISampleBean.javapublic interface ISampleBean public void foo(int x); public void bar(); 接口实现类:SampleBean.javapublic class SampleBean implements ISampleBean public void foo(int x) System.out.println(Invoked foo() with: + x); public void bar() System.out.println(Invoked bar(); 相关支撑知识第25页动态Pointcut2 2一Pointcut、Advisior任务2 考勤查询设计(1)DynamicMethodMatcherPointcut【例6-7】DynamicMethodMatcherPointcut使用实例l 通知foo()方法并且仅仅希望当传递给方法int参数等于100时对方法进行通知动态切入点类:SimpleDynamicPointcut.javapublic class SimpleDynamicPointcut extends DynamicMethodMatcherPointcut public boolean matches(Method method, Class cls) System.out.println(Static check for + method.getName();return (foo.equals(method.getName();public boolean matches(Method method, Class cls, Object args) System.out.println(Dynamic check for + method.getName();int x = (Integer) args0;return (x = 100);public ClassFilter getClassFilter() return new ClassFilter() public boolean matches(Class cls) return (cls = SampleBean.class);相关支撑知识第26页动态Pointcut2 2一Pointcut、Advisior任务2 考勤查询设计(1)DynamicMethodMatcherPointcut【例6-7】DynamicMethodMatcherPointcut使用实例 修改配置文件 simpleBeanAdvisor 相关支撑知识第27页动态Pointcut2 2一Pointcut、Advisior任务2 考勤查询设计(1)DynamicMethodMatcherPointcut【例6-7】DynamicMethodMatcherPointcut使用实例运行结果相关支撑知识第28页二基于XML Schema的设置任务2 考勤查询设计p Spring 3.0中,除了传统的通过实现AOP API的方式来实现Advice之外,还提供了两种更加简便的方式来实现Advice:l Before Advice:基于XML Schemal After Advice:基于XML Sechmap 采用上述两种方式,Advice不用实现特定的接口。相关支撑知识第29页Brfore Advice:基于XML Schema1 1二基于XML Schema的设置任务2 考勤查询设计(1)Before Advice【例6-8】基于XML Schema的Before Advice实例l 当基于XML Schema实现Before Advice时, Advice类不用实现MethodBeforeAdvice接口。 接口:IHello.javapublic interface IHello public void hello(String name); 接口实现类:HelloSpeaker.javapublic class HelloSpeaker implements IHello public void hello(String name) System.out.println(Hello,+name);相关支撑知识第30页Brfore Advice:基于XML Schema1 1二基于XML Schema的设置任务2 考勤查询设计(1)Before Advice【例6-8】基于XML Schema的Before Advice实例 LogAspect .javapublic class LogAspect private Logger logger=Logger.getLogger(this.getClass().getName(); public void before(JoinPoint jointPoint) logger.log(Level.INFO, method starts. + jointPoint.getSignature().getDeclaringTypeName() + . + jointPoint.getSignature().getName(); before方法:l是在目标对象上的方法被执行前要执行的方法;lJoinPoint参数是可选项,可以根据需要决定是否需要JoinPoint参数,通过JoinPoint对象,可以获得目标对象(getTarget())、目标方法上的参数(getArgs())等信息。相关支撑知识第31页Brfore Advice:基于XML Schema1 1二基于XML Schema的设置任务2 考勤查询设计(1)Before Advice【例6-8】基于XML Schema的Before Advice实例 配置文件:beans-config.xml l 使用基于XML Sechma声明AOP,要在XML中加入aop的名称空间;l 所有的AOP都是在标签中声明的;l 用于定义Advice实例;l 表示当前实例用于实现Before Advice;l pointcut属性用于指定pointcut表示式;l method属性表示Advice上要调用的方法。相关支撑知识第32页Brfore Advice:基于XML Schema1 1二基于XML Schema的设置任务2 考勤查询设计(1)Before Advice【例6-8】基于XML Schema的Before Advice实例 测试类:TestClass.javapublic class TestClass public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext(beans-config.xml); try IHello helloSpeaker=(IHello) context.getBean(helloSpeaker); helloSpeaker.hello(Jack); catch(Exception e) e.printStackTrace(); 相关支撑知识第33页Brfore Advice:基于XML Schema1 1二基于XML Schema的设置任务2 考勤查询设计(1)Before Advice【例6-8】基于XML Schema的Before Advice实例运行结果相关支撑知识第34页After Advice:基于XML Schema2 2二基于XML Schema的设置任务2 考勤查询设计(2)After Advice【例6-9】基于XML Schema的After Advice实例l 与Before Advice一样,基于XML Sechma实现After Returning Advice时,不再需要org.springframework.aop.AfterReturningAdvice接口。 修改LogAspect类,在其中增加after方法public void after(JoinPoint jointPoint) logger.log(Level.INFO, method ends. + jointPoint.getSignature().getDeclaringTypeName() + . + jointPoint.getSignature().getName(); 修改配置文件接口与接口实现类与例6-8相同相关支撑知识第35页After Advice:基于XML Schema2 2二基于XML Schema的设置任务2 考勤查询设计(2)After Advice【例6-9】基于XML Schema的After Advice实例运行结果相关支撑知识第36页Around Advice:基于XML Schema3 3二基于XML Schema的设置任务2 考勤查询设计(2)Around Advice【例6-10】基于XML Schema的Around Advice实例l 在Spring 3.0中,Around Advice不用实现MethodInterceptor接口,但Advice方法必须返回对象,并且必须定义一个ProceedingJoinPoint参数。 修改LogAspect类,在其中增加invoke方法public Object invoke(ProceedingJoinPoint jointPoint) throws Throwable logger.log(Level.INFO, method starts. + jointPoint.getSignature().getDeclaringTypeName() + . + jointPoint.getSignature().getName(); Object retVal=jointPoint.proceed(); logger.log(Level.INFO, method ends. + jointPoint.getSignature().getDeclaringTypeName() + . + jointPoint.getSignature().getName(); return retVal; 接口与接口实现类与例6-8相同相关支撑知识第37页Around Advice:基于XML Schema3 3二基于XML Schema的设置任务2 考勤查询设计(2)Around Advice【例6-10】基于XML Schema的Around Advice实例l 在Spring 3.0中,Around Advice不用实现MethodInterceptor接口,但Advice方法必须返回对象,并且必须定义一个ProceedingJoinPoint参数。 修改配置文件运行结果过渡页第38页过渡页任务小结任务小结能力目标第39页1AOP中的Pointcut和Advisor作用2静态和动态Pointcut实现方式3基于XML 实现Advisor方式任务2 考勤查询设计谢谢观看
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!