當前位置:首頁 » 編程語言 » 切面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