AspectJは、注釈による接線と強化について説明します。
開発環境の要件
注釈を使用したいので、Java 5.0以上を使用していることを確認してください。
AspectJ関連のクラスライブラリを紹介します。
<依存関係> groupId> org.aspectj </groupid> <artifactid> aspectjrt </artifactid> <version> $ {aspectj.version} </version> </dependency> <dependency> <groupid> org.aspectj </groupId> <artifactid> aspecid> artifactid> <バージョン> $ {aspectj.version} </version> </dependency> <dependency> <shipidence> <groupid> org.aspectj </groupid> <artifactid> aspectjtools </artifactid> <バージョン> $ {aspectj.version} </version> </dependency> <sependency> <グループ<バージョン> $ {aspectj.version} </version> </dependency> <dependency> <groupid> aopalliance </groupid> <artifactid> aopalliance </artifactid> <バージョン> $ {aopalliance.version} </version> </dependency> 2つのプログラミング方法
@asete //ファセットを識別します
public class prerentaspect {/*** Enhanced Logic*/@before( "execution(* rent(..))")// Tangent and Enhancement Types public void beforerent(){system.out.println( "レンタルアクションの実行を開始"); }}このセクションは普通のPojoですが、@aspect Annotationが追加されています。
@Before("execution(* rent(..))")は、 @Before型が事前に強化された拡張機能であり、そのコンテンツは@aspectjポイントカット式であることを意味します。ここでは、ターゲットクラスのRent()メソッドに拡張が織り込まれていることを意味します。 Rent()には、着信パラメーターと返品値を含めることができます。
@Aspectを備えたクラスが、注釈とコードを通じて接線ポイント、強化タイプ、強化されたクロスカットロジックを統合するのに非常に便利ではありませんか? o(∩_∩)o haha〜
ユニットテスト:
AspectJProxyFactory = new AspectJProxyFactory(); //ターゲットクラスFactory.settarget(new user()); // Facet class factory.addaspect(prerentaspect.class); user proxy = factory.getproxy(); string userid = "; userid(userid.)
出力結果:
- レンタルアクションを開始 -
ユーザー:レンタル[パワーバンク]
ユーザー:[Power Bank]を返す
3構成方法
<! - ターゲットクラス - > <bean id = "user"/> <! - face class-> <bean/> <! - 自動的にエージェントを作成 - > <bean/>
ユニットテスト:
ApplicationContext Context = new ClassPathXMLApplicationContext(spring.xml "); user user =(user)context.getBean(" user "); string userid =" 001 "; user.rent(userId); user.back(userId);
出力はプログラムとまったく同じです。
また、スキーマのAOP名前空間に基づいて構成することもできます。
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:aop = "http://www.springframework.org/schema/aop" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/ドライブ - > <aop:aspectj-autoproxy/> <! - ターゲットクラス - > <bean id = "user"/> <! - face class-> <bean/> </beans>
この構成はよりシンプルです。実際、自動プロキシモードは<aop:aspectj-atuoproxy/> o(∩_∩)o haha〜内で採用されています〜
<aop:aspectj-atuoproxy/>のproxy-target-class属性はデフォルトで偽りであり、JDKダイナミックプロキシテクノロジーを使用して拡張が織り込まれていることを示しています。この値が真である場合、CGLIB Dynamic Proxyテクノロジーを使用して強化が織り込まれていることを示します。ターゲットクラスがインターフェイスを宣言しない場合、 proxy-target-classがfalsに設定されていても、強化されたyo(∩_∩)o haha〜
Java 5.0+に基づくプロジェクトの場合、AspectJを使用してポイントカットと拡張を構成することをお勧めします。これはよりシンプルで直接的なものであるためです。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。