Skip to content

Commit 4b1285b

Browse files
committed
JDK 动态代理
1 parent 4b064a7 commit 4b1285b

15 files changed

Lines changed: 323 additions & 126 deletions

File tree

pom.xml

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,57 @@
1313
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
1414
<!-- 编译时的编码 -->
1515
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
16+
<dubbo.version>2.5.3</dubbo.version>
17+
<jdk.version>1.7</jdk.version>
18+
<spring.version>4.1.4.RELEASE</spring.version>
19+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1620
</properties>
1721

1822

19-
20-
2123
<dependencies>
2224
<dependency>
2325
<groupId>junit</groupId>
2426
<artifactId>junit</artifactId>
2527
<version>4.8.2</version>
2628
<scope>test</scope>
2729
</dependency>
30+
31+
32+
33+
<dependency>
34+
<groupId>log4j</groupId>
35+
<artifactId>log4j</artifactId>
36+
<version>1.2.17</version>
37+
</dependency>
38+
<dependency>
39+
<groupId>org.apache.commons</groupId>
40+
<artifactId>commons-lang3</artifactId>
41+
<version>3.4</version>
42+
</dependency>
43+
44+
45+
<dependency>
46+
<groupId>ch.qos.logback</groupId>
47+
<artifactId>logback-classic</artifactId>
48+
<version>1.0.13</version>
49+
</dependency>
50+
<dependency>
51+
<groupId>ch.qos.logback</groupId>
52+
<artifactId>logback-core</artifactId>
53+
<version>1.0.13</version>
54+
</dependency>
55+
56+
<dependency>
57+
<groupId>org.slf4j</groupId>
58+
<artifactId>slf4j-api</artifactId>
59+
<version>1.7.21</version>
60+
</dependency>
61+
<dependency>
62+
<groupId>com.alibaba</groupId>
63+
<artifactId>fastjson</artifactId>
64+
<version>1.1.40</version>
65+
</dependency>
66+
2867
</dependencies>
2968

3069
<build>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.crossoverjie.proxy;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
import java.lang.reflect.InvocationHandler;
7+
import java.lang.reflect.Method;
8+
9+
/**
10+
* Function:
11+
*
12+
* @author crossoverJie
13+
* Date: 23/12/2017 22:27
14+
* @since JDK 1.8
15+
*/
16+
public class CustomizeHandle implements InvocationHandler {
17+
private final static Logger LOGGER = LoggerFactory.getLogger(CustomizeHandle.class);
18+
19+
private Object target;
20+
21+
public CustomizeHandle(Class clazz) {
22+
try {
23+
this.target = clazz.newInstance();
24+
} catch (InstantiationException e) {
25+
LOGGER.error("InstantiationException", e);
26+
} catch (IllegalAccessException e) {
27+
LOGGER.error("IllegalAccessException",e);
28+
}
29+
}
30+
31+
@Override
32+
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
33+
34+
before();
35+
Object result = method.invoke(target, args);
36+
after();
37+
38+
LOGGER.info("proxy class={}", proxy.getClass());
39+
40+
return result;
41+
}
42+
43+
44+
private void before() {
45+
LOGGER.info("handle before");
46+
}
47+
48+
private void after() {
49+
LOGGER.info("handle after");
50+
}
51+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.crossoverjie.proxy;
2+
3+
/**
4+
* Function:
5+
*
6+
* @author crossoverJie
7+
* Date: 23/12/2017 22:37
8+
* @since JDK 1.8
9+
*/
10+
public interface ISubject {
11+
12+
/**
13+
* 执行
14+
*/
15+
void execute() ;
16+
}

src/main/java/com/crossoverjie/proxy/ListNode.java

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.crossoverjie.proxy.impl;
2+
3+
import com.crossoverjie.proxy.ISubject;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
/**
8+
* Function:
9+
*
10+
* @author crossoverJie
11+
* Date: 23/12/2017 22:43
12+
* @since JDK 1.8
13+
*/
14+
public class ISubjectImpl implements ISubject {
15+
private final static Logger LOGGER = LoggerFactory.getLogger(ISubjectImpl.class);
16+
/**
17+
* 执行
18+
*/
19+
@Override
20+
public void execute() {
21+
LOGGER.info("ISubjectImpl execute");
22+
}
23+
}

src/main/resources/logback.xml

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<configuration>
3+
<property name="LOG_PATH" value="/logs/interview" />
4+
<property name="LOG_FILE_NAME" value="interview" />
5+
6+
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
7+
<encoder>
8+
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
9+
</encoder>
10+
</appender>
11+
12+
<appender name="LOGFILE-DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
13+
<filter class="ch.qos.logback.classic.filter.LevelFilter">
14+
<level>DEBUG</level>
15+
<onMatch>ACCEPT</onMatch>
16+
<onMismatch>DENY</onMismatch>
17+
</filter>
18+
<File>${LOG_PATH}/${LOG_FILE_NAME}-debug.log</File>
19+
<rollingPolicy
20+
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
21+
22+
<FileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}_debug_%d{yyyy-MM-dd}.log.%d{yyyy-MM-dd}</FileNamePattern>
23+
</rollingPolicy>
24+
<encoder>
25+
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %p %C %t, - %msg%n</pattern>
26+
<charset>UTF-8</charset>
27+
</encoder>
28+
</appender>
29+
30+
<appender name="LOGFILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
31+
<filter class="ch.qos.logback.classic.filter.LevelFilter">
32+
<level>INFO</level>
33+
<onMatch>ACCEPT</onMatch>
34+
<onMismatch>DENY</onMismatch>
35+
</filter>
36+
<File>${LOG_PATH}/${LOG_FILE_NAME}-info.log</File>
37+
<rollingPolicy
38+
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
39+
<FileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}_info_%d{yyyy-MM-dd}.log.%d{yyyy-MM-dd}</FileNamePattern>
40+
41+
</rollingPolicy>
42+
<encoder>
43+
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %p %C %t, - %msg%n</pattern>
44+
<charset>UTF-8</charset>
45+
</encoder>
46+
</appender>
47+
48+
<appender name="LOGFILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
49+
<filter class="ch.qos.logback.classic.filter.LevelFilter">
50+
<level>ERROR</level>
51+
<onMatch>ACCEPT</onMatch>
52+
<onMismatch>DENY</onMismatch>
53+
</filter>
54+
<File>${LOG_PATH}/${LOG_FILE_NAME}-error.log</File>
55+
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
56+
<FileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}_error_%d{yyyy-MM-dd}.%d{yyyy-MM-dd}</FileNamePattern>
57+
</rollingPolicy>
58+
<encoder>
59+
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %p %C %t, - %msg%n</pattern>
60+
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
61+
</encoder>
62+
<!--<layout class="ch.qos.logback.classic.PatternLayout">
63+
<pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %p %C %t, - %msg%n</pattern>
64+
</layout>-->
65+
</appender>
66+
67+
68+
<logger name="com.crossoverjie">
69+
<level value="INFO" />
70+
<appender-ref ref="LOGFILE-INFO"/>
71+
</logger>
72+
73+
74+
<root level="INFO">
75+
<appender-ref ref="LOGFILE-DEBUG" />
76+
<appender-ref ref="LOGFILE-INFO" />
77+
<appender-ref ref="LOGFILE-ERROR" />
78+
<appender-ref ref="CONSOLE" />
79+
<appender-ref ref="LOGFILE-COMMON" />
80+
</root>
81+
82+
83+
</configuration>

src/test/java/com/crossoverjie/proxy/MergeTwoSortedListsTest.java

Lines changed: 0 additions & 92 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.crossoverjie.proxy;
2+
3+
import com.crossoverjie.proxy.impl.ISubjectImpl;
4+
import org.junit.Test;
5+
6+
import java.lang.reflect.Proxy;
7+
8+
/**
9+
* Function:
10+
*
11+
* @author crossoverJie
12+
* Date: 23/12/2017 22:40
13+
* @since JDK 1.8
14+
*/
15+
public class ProxyTest {
16+
17+
@Test
18+
public void test(){
19+
CustomizeHandle handle = new CustomizeHandle(ISubjectImpl.class) ;
20+
ISubject subject = (ISubject) Proxy.newProxyInstance(ProxyTest.class.getClassLoader(), new Class[]{ISubject.class}, handle);
21+
subject.execute() ;
22+
}
23+
}
1.99 KB
Binary file not shown.
144 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)