java 切面是什么意思,使用java语言,如何对一个类中的静态方法做切面编程
各位老铁们好,相信很多人对java 切面是什么意思都不是特别的了解,因此呢,今天就来为大家分享下关于java 切面是什么意思以及使用java语言,如何对一个类中的静态方法做切面编程的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
Java中的过滤器、拦截器、监听器分别是什么意思
王朝*说的很全面了,翻阅了几本资料后,从J2EE的角度略作补充吧。
1)首先是拦截器,拦截器是一种面向方面/切面编程(AOP Aspect-Oriented Programming),而面向切面就是将多个模块的的通用服务进行分离,如权限管理、日志服务,他们在多个模块中都会用到,就可以将其各自封装为一个可重用模块。而这些通用服务的具体实现是通过拦截器来完成,比如用户客户端访问一些保密模块都应先通过权限审查的拦截器来进行权限审查,确定用户是否具有该项操作的权限后方能向下执行。
2)过滤器,过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,客户端与Web资源之间的请求和响应都要通过过滤器进行过滤。举例:在过滤器中定义了禁止访问192.10.10.1这个地址,那么当客户端发出访问192.10.10.1的请求时,经过过滤器后,客户端得到的响应是出现该IP禁止访问的提示。再举个例子,我们J2EE项目中的权限管理就是通过过滤器实现的,网站有不用身份的用户(系统管理员、会员级用户、浏览者临时用户),不用身份对系统的功能模块具有不同的访问权限,可以将各功能模块以*.do命名,然后在过滤器中配置过滤*.do,就可以控制不同级别用户的访问权限了
3)监听器,是针对事件而说的,可以说是事件监听器,J2EE中事件主要有三类:ServletContext事件、会话事件和请求事件。以ServletContext对象的创建事件为例,利用针对ServletContext对象创建事件的监听器来监听,一旦监听到有ServletContext对象的创建事件(比如项目启动时的初化),就读取相应的数据库连接操作来保存供调用。简单来说监听器就是监听一些对象和属性等的增加、修改和删除,一旦监听到相应事件就会触发某种活动,做出相应处理。
答案均系在图书馆查阅资料后手敲,不知满意否,呵呵。
使用java语言,如何对一个类中的静态方法做切面编程
方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。
连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。
切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点,例如,使用正则表达式。
引入(Introduction):添加方法或字段到被通知的类。Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现IsModified接口,来简化缓存。
目标对象(Target Object):包含连接点的对象,也被称作被通知或被代理对象。
AOP代理(AOP Proxy):AOP框架创建的对象,包含通知。在Spring中,AOP代理可以是JDK动态代理或CGLIB代理。
编织(Weaving):组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。
Java配置切面的几种方式你都知道吗
演示5种方式配置文件AOP
1.<bean class="cn.hncu.spring4x.aop.Cat" id="cat"></bean>
<!--切点-->
<bean class="org.springframework.aop.support.JdkRegexpMethodPointcut" id="pointcut">
<property name="pattern" value=".*run.*"></property>
</bean>
<!--通知,要自己写-->
<bean class="cn.hncu.spring4x.aop.AroundAdvice" id="advice"></bean>
<!--切面=切点+通知-->
<bean class="org.springframework.aop.support.DefaultPointcutAdvisor" id="advisor">
<property name="advice" ref="advice"></property>
<property name="pointcut" ref="pointcut"></property>
</bean>
<bean class="org.springframework.aop.framework.ProxyFactoryBean" id="catProxide">
<property name="target" ref="cat"></property>
<property name="interceptorNames">
<list>
<value>advisor</value>
</list>
</property>
</bean>
2.<bean class="cn.hncu.spring4x.aop.Cat" id="cat"></bean>
<!--切面=切点+通知(把切点和通知写成内部bean)-->
<bean class="org.springframework.aop.support.DefaultPointcutAdvisor" id="advisor">
<property name="advice">
<bean class="cn.hncu.spring4x.aop.AroundAdvice"></bean>
</property>
<property name="pointcut">
<bean class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="patterns">
<list>
<value>.*run.*</value>
<value>.*say.*</value>
</list>
</property>
</bean>
</property>
</bean>
<bean class="org.springframework.aop.framework.ProxyFactoryBean" id="catProxide">
<property name="target" ref="cat"></property>
<property name="interceptorNames">
<list>
<value>advisor</value>
</list>
</property>
</bean>
3.<bean class="cn.hncu.spring4x.aop.Cat" id="cat"></bean>
<!--//直接在切面bean中配置“切点的正则表达式”,省去“切点bean”的配置用到这个类 org.springframework.aop.support.RegexpMethodPointcutAdvisor-->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor">
<property name="advice">
<bean class="cn.hncu.spring4x.aop.AroundAdvice"></bean>
</property>
<property name="patterns">
<list>
<value>.*run.*</value>
</list>
</property>
</bean>
<bean class="org.springframework.aop.framework.ProxyFactoryBean" id="catProxide">
<property name="target" ref="cat"></property>
<property name="interceptorNames">
<list>
<value>advisor</value>
</list>
</property>
</bean>
4.<bean class="cn.hncu.spring4x.aop.Cat" id="cat"></bean>
<!--//直接在切面bean中配置“切点的正则表达式”,省去“切点bean”的配置用到这个类 org.springframework.aop.support.RegexpMethodPointcutAdvisor-->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor">
<property name="advice">
<bean class="cn.hncu.spring4x.aop.AroundAdvice"></bean>
</property>
<property name="patterns">
<list>
<value>.*run.*</value>
</list>
</property>
</bean>
<!--自动代理-->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>
5.<bean class="cn.hncu.spring4x.aop.Cat" id="cat"></bean>
<!--//直接在切面bean中配置“切点的正则表达式”,省去“切点bean”的配置用到这个类 org.springframework.aop.support.RegexpMethodPointcutAdvisor-->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" id="advisor">
<property name="advice">
<bean class="cn.hncu.spring4x.aop.AroundAdvice"></bean>
</property>
<property name="patterns">
<list>
<value>.*run.*</value>
</list>
</property>
</bean>
<!--自动代理-->
<bean class="cn.hncu.spring4x.aop.MyAutoProxy"></bean>
文章分享结束,java 切面是什么意思和使用java语言,如何对一个类中的静态方法做切面编程的答案你都知道了吗?欢迎再次光临本站哦!