当前位置:首页 » 编程语言 » 切面java

切面java

发布时间: 2023-01-20 02:05:35

‘壹’ java中的静态方法能否进行切面编程

aop的事务代理机制最重要的放心是确定切入点,面,通知.具体看代码,下面是在spring中配置的我自己写的一个异常处理的aop作用类 ,该配置切入面在于在controller包下的所有类的所有注解为aspect的切面类,通知类型为表示在目标方法之前切入,切入点为controller包下的所有类所有方法.至于楼主所说的静态方法对于事务机制应该没什么区别吧,只要用within方法一样可以的

<!-- 定义共同处理组件 -->
<bean id="loggerBean"
class="org.te.cloudnote.aspect.LoggerBean">
</bean>
<!-- 将loggerBean组件切入到Controller方法上 -->
<aop:config>
<!-- 要切入哪个共同处理组件,ref指定共同组件id值 -->
<aop:aspect ref="loggerBean">
<!-- aop:before表示在目标方法之前切入,
method指定方法名;pointcut指定目标组件 -->
<aop:before method="logController"
pointcut="within(org.te.cloudnote.controller..*)"/>
</aop:aspect>

‘贰’ 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."></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切面编程是什么设计模式

面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。
可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

‘肆’ java切面after是异步还是同步

异步操作。在java软件的使用介绍中可以了解到,通过该软件切面after是异步操作的。Java是一门面向对象的编程语言,不仅吸收了C加加语言的各种优点,还摒弃了C加加里难以理解的多继承、指针等概念。

‘伍’ 谁能解释一下java面向切面编程的思想 以及具体的使用方式

面向切面编程(AOP),就是关注程序运行的过程,切面就是要把方法切开,分别执行前,执行中,执行后(可能更细化)等多个步骤,分别针对这三个阶段进行处理。以获得逻辑过程中各部分之间低耦合性的隔离效果。

具体使用场景:

  1. 事务管理:我们在操作数据库的时候需要在操作前打开事务,结束后提交事务(或回滚事务),按往常的编码方式,我们会在每个方法前、后都添加一些事务操作的重复的代码,使得每个类都与事务操作相耦合;而使用了AOP,代码上看上去就是直接操作的数据库,而我们通过某种机制,可让代码在你不察觉的情况下进行了事务开启和提交(或回滚),事实上Spring就提供了这种事务机制。

  2. 差不多的场景还有日志的记录

‘陆’ java开发中,数据权限是基于拦截器好还是基于切面好

拦截器好吧。
拦截器通过继承或者实现框架现成的父拦截器接口来实现拦截功能(例如mybatisplus的InnerInterceptor接口),而切面底层是用到了反射,反射本身耗时更久,虽说影响不是特别大但是还是没有直接实现父拦截器来得快。
而且切面的话你还要制订切面的Pointcut规则,让切入的方法都要满足该规则,如果切的是注解的话还要在到处加注解,不如统一在拦截器里进行处理算了。

‘柒’ java的切面能修改参数吗

java的切面能修改参数。方法:
1、用切面的方式,在切面对controller进行拦截。
2、过滤器,自定义一个过滤器,自定义wrapper实现HttpServletRequestWrapper

‘捌’ java怎么运用切面编程生成日志

1.首先创建一个自定义注解拦截Controller类,代码如下
/**
* 自定义注解 拦截Controller
*/
@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ControllerLog {
String desc() default "";//标示默认打印空
}
2.创建一个打印日志的切面类,引入切面注解@Aspect,
新建方法代码如下:
// Controller层切点
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void recordLog() {
}
@Around("recordLog()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
// ExPatternParser.initLogger();
long start = System.currentTimeMillis();
Object[] args = pjp.getArgs();
String remark = this.(pjp);
Object retVal = null;
try {
retVal = pjp.proceed();
} catch (Throwable e) {
// TODO Auto-generated catch block
logger.error("请求失败" + e.toString(),e);
remark = remark + "。Exception Cause By " + e.toString();
throw e;
}finally{
long end = System.currentTimeMillis();
long cost = end - start;
//打印访问日志
// Controller中所有方法的参数,前两个分别为:Request,Response
if(args != null && args.length > 0){
Object o = args[0];
if(o instanceof HttpServletRequest){
HttpServletRequest request = (HttpServletRequest) args[0];
PrintLog.visit(request, cost,remark);
}
}
}
return retVal;
}
/**
* 获取注解中对方法的描述信息 用于Controller层注解
* @param joinPoint切点
* @return 方法描述
* @throws Exception
*/
public static String (ProceedingJoinPoint joinPoint)
throws Exception {
String targetName = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class targetClass = Class.forName(targetName);
Method[] methods = targetClass.getMethods();
String description = "";
for (Method method : methods) {
if (method.getName().equals(methodName)) {
Class[] clazzs = method.getParameterTypes();
if (clazzs.length == arguments.length) {
ControllerLog controllerLog = method.getAnnotation(ControllerLog.class);
if(controllerLog !=null){
description =
controllerLog.desc();

}
break;
}
}
}
return description;
}

3.然后在每个Controller类上加上注解:
@ControllerLog(desc = "要 打印的日志内容")

热点内容
生女的算法 发布:2025-07-18 08:17:54 浏览:645
加密硬盘推荐 发布:2025-07-18 08:11:22 浏览:944
oppo手机的密码是多少 发布:2025-07-18 08:10:27 浏览:764
2匹压缩机重 发布:2025-07-18 08:01:40 浏览:181
云蚁物联的云存储怎么取消退款 发布:2025-07-18 08:01:39 浏览:486
访问电脑版网页 发布:2025-07-18 08:01:02 浏览:246
php集成软件 发布:2025-07-18 07:54:36 浏览:143
华为密码多少我忘记了告诉我 发布:2025-07-18 07:53:05 浏览:286
安卓怎么上传音乐到网易云 发布:2025-07-18 07:22:22 浏览:375
c语言保存txt文件 发布:2025-07-18 07:01:27 浏览:175