<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                下面實現在執行自己的業務代碼`StudentServiceImpl.add`方法之前,先插入一個處理日志的方法`printLogger`。 <br/> 步驟如下: **1. 創建一個Maven項目** ```xml <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>5.2.9.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.2.9.RELEASE</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>compile</scope> </dependency> </dependencies> ``` **2. 創建接口以及實現該接口的類** ```Java public interface StudentService { void add (int x, int y); } ``` ```java public class StudentServiceImpl implements StudentService { /** * 目標函數 */ @Override public void add(int x, int y) { System.out.println("------目標函數的輸出------\n" + (x + y)); } } ``` **3. 定義一個切面** ```java public class AspectLogger { private static final Logger logger = Logger.getLogger(AspectLogger.class); /** * 增強函數,在同一個切面中如果存在多個重載的增強函數,即使參數列表不一致 * 默認起作用的始終是第一個增強函數,其它的無效 */ public void printLogger(JoinPoint jPoint) { logger.info("\n------增強函數的輸出------" + "\n增強方式:前置增強" + "\n目標對象:" + jPoint.getTarget() + "\n目標函數:" + jPoint.getSignature().getName() + "\n目標函數的參數:" + Arrays.toString(jPoint.getArgs())); } } ``` **4. 將相關組件注入到IoC容器中** *`resources/ApplicationContext.xml`* ```xml <?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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 目標對象注入 --> <bean id="studentService" class="com.learn.spring.aop.service.impl.StudentServiceImpl"/> <!-- 切面對象注入 --> <bean id="aspectLogger" class=" com.learn.spring.aop.aspect.AspectLogger"/> <!-- 切面配置 --> <aop:config> <!-- 定義切入點 id: 切入點唯一標識 expression: 切入點表達式,只要任一目標函數的定義符合該表達式,就會被做增強處理 --> <aop:pointcut id="add" expression="execution(public void add(int, int))"/> <!-- 定義切面 ref: 上面切面對象的id值 --> <aop:aspect ref="aspectLogger"> <!-- 增強類型:前置增強 method: 增強方法,對應切面對象中的方法,即AspectLogger.printLogger方法 pointcut-ref: 引用上面定義的切入點 --> <aop:before method="printLogger" pointcut-ref="add"/> </aop:aspect> </aop:config> </beans> ``` **5. log4j日志配置文件`resources/log4j.properties`** ```java ############## log4j 日志相關配置 ############## log4j.rootLogger=DEBUG,CONSOLE,file #log4j.rootLogger=ERROR,ROLLING_FILE log4j.logger.cn.smbms.dao=debug log4j.logger.com.ibatis=debug log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug log4j.logger.java.sql.Connection=debug log4j.logger.java.sql.Statement=debug log4j.logger.java.sql.PreparedStatement=debug log4j.logger.java.sql.ResultSet=debug log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug ###################################################################################### # Console Appender 日志在控制輸出配置 ###################################################################################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=error log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n ###################################################################################### # DailyRolling File 每天產生一個日志文件,文件名格式:log2009-09-11 ###################################################################################### log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.DatePattern=yyyy-MM-dd log4j.appender.file.File=log.log log4j.appender.file.Append=true log4j.appender.file.Threshold=error log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n log4j.logger.com.opensymphony.xwork2=error ``` **6. 測試** ```java @Test public void test01() { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); StudentService studentService = (StudentService) context.getBean("studentService"); studentService.add(10, 20); } ``` 輸出結果如下,因為使用的是前置增強,所以增強的輸出會在目標函數的輸出前面。 ``` ------增強函數的輸出------ 增強方式:前置增強 目標對象:com.learn.spring.aop.service.impl.StudentServiceImpl@294425a7 目標函數:add 目標函數的參數:[10, 20] ------目標函數的輸出------ 30 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看