<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AOP on 蛋蛋忧桑</title><link>https://dandansad.com/tags/aop/</link><description>Recent content in AOP on 蛋蛋忧桑</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 11 Apr 2025 00:46:25 +0800</lastBuildDate><atom:link href="https://dandansad.com/tags/aop/index.xml" rel="self" type="application/rss+xml"/><item><title>spring-demo</title><link>https://dandansad.com/2025/04/11/spring-demo/</link><pubDate>Fri, 11 Apr 2025 00:46:25 +0800</pubDate><guid>https://dandansad.com/2025/04/11/spring-demo/</guid><description>&lt;p&gt;一个Spring的AOP练习程序。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;&lt;span style="color:#f92672"&gt;---&lt;/span&gt;springdemo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; SpringDemoApplication.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;├─&lt;/span&gt;aop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; MyAspect.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;├─&lt;/span&gt;controller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; Test.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;└─&lt;/span&gt;service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Another.java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对于Spring来说，其AOP的实现十分简单。只需要在导入相关依赖之后在注解类上使用@Aspect和@Component注解，然后使用@Pointcut定义切点，在相关方法上用你需要的AOP通知类型注解即可。&lt;/p&gt;</description></item><item><title>AOP-Exercise</title><link>https://dandansad.com/2025/04/10/aop-exercise/</link><pubDate>Thu, 10 Apr 2025 22:19:28 +0800</pubDate><guid>https://dandansad.com/2025/04/10/aop-exercise/</guid><description>&lt;p&gt;一个面向切面编程的练习程序。其中面向切面编程采用的是配置文件的做法，支持多个前置方法和后置方法，按照配置文件中的优先级区分执行顺序。食物类通过注解获取食物名称和价格。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;&lt;span style="color:#f92672"&gt;--&lt;/span&gt;aop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; FoodInfo.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; Kitchen.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; MyAspect.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; Proxyhandler.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; Restaurant.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; RestaurantInterface.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; TestRestaurant.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;└─&lt;/span&gt;foods
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Beef.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Broccoli.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Chicken.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Food.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Newfood.java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="foods包下的类"&gt;&lt;a href="#foods%e5%8c%85%e4%b8%8b%e7%9a%84%e7%b1%bb" class="header-anchor"&gt;&lt;/a&gt;foods包下的类
&lt;/h2&gt;&lt;p&gt;食物类，其中食物名称和价格用注解标注。&lt;/p&gt;
&lt;h2 id="foodinfojava"&gt;&lt;a href="#foodinfojava" class="header-anchor"&gt;&lt;/a&gt;FoodInfo.java
&lt;/h2&gt;&lt;p&gt;注解，食物名称和价格。&lt;/p&gt;
&lt;h2 id="kitchenjava"&gt;&lt;a href="#kitchenjava" class="header-anchor"&gt;&lt;/a&gt;Kitchen.java
&lt;/h2&gt;&lt;p&gt;工厂类，主要负责根据名称创建食物实例、获取食物价格。&lt;/p&gt;
&lt;h2 id="myaspectjava"&gt;&lt;a href="#myaspectjava" class="header-anchor"&gt;&lt;/a&gt;MyAspect.java
&lt;/h2&gt;&lt;p&gt;切面方法。&lt;/p&gt;
&lt;h2 id="proxyhandlerjava"&gt;&lt;a href="#proxyhandlerjava" class="header-anchor"&gt;&lt;/a&gt;Proxyhandler.java
&lt;/h2&gt;&lt;p&gt;调用处理器类，在其中实现面向切面编程，在需要切入的方法前后分别按照优先级执行前置方法和后置方法。&lt;/p&gt;
&lt;h2 id="restaurantjava"&gt;&lt;a href="#restaurantjava" class="header-anchor"&gt;&lt;/a&gt;Restaurant.java
&lt;/h2&gt;&lt;p&gt;RestaurantInterface的实现类，实现餐厅的方法。&lt;/p&gt;
&lt;h2 id="restaurantinterfacejava"&gt;&lt;a href="#restaurantinterfacejava" class="header-anchor"&gt;&lt;/a&gt;RestaurantInterface.java
&lt;/h2&gt;&lt;p&gt;接口，定义餐厅的方法。&lt;/p&gt;
&lt;h2 id="testrestaurantjava"&gt;&lt;a href="#testrestaurantjava" class="header-anchor"&gt;&lt;/a&gt;TestRestaurant.java
&lt;/h2&gt;&lt;p&gt;主类，完成点餐功能。在开始时读入并加载配置文件，创建动态代理对象，之后执行正常的点餐流程，当用户点餐时调用Kitchen创建食物类，下单并享用食物。&lt;/p&gt;
&lt;h2 id="总结"&gt;&lt;a href="#%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;总结
&lt;/h2&gt;&lt;p&gt;这个程序主要使用动态代理实现了AOP，从配置文件中读取前置方法和后置方法。&lt;/p&gt;</description></item></channel></rss>