mirror of
https://github.com/Estom/notes.git
synced 2026-02-04 02:53:57 +08:00
Java内容重新整理删除过期的东西
This commit is contained in:
27
Java/JavaDemo/codedemo/proxy/AccountService.java
Normal file
27
Java/JavaDemo/codedemo/proxy/AccountService.java
Normal file
@@ -0,0 +1,27 @@
|
||||
package cn.aofeng.demo.proxy;
|
||||
|
||||
/**
|
||||
* 账号服务接口定义。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public interface AccountService {
|
||||
|
||||
/**
|
||||
* 注册。
|
||||
*
|
||||
* @param username 账号名
|
||||
* @return 具体含义查看{@link Result}的说明。
|
||||
*/
|
||||
Result register(String username);
|
||||
|
||||
/**
|
||||
* 登录。
|
||||
*
|
||||
* @param username 账号名
|
||||
* @param password 密码
|
||||
* @return 具体含义查看{@link Result}的说明。
|
||||
*/
|
||||
Result login(String username, String password);
|
||||
|
||||
}
|
||||
28
Java/JavaDemo/codedemo/proxy/AccountServiceClient.java
Normal file
28
Java/JavaDemo/codedemo/proxy/AccountServiceClient.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package cn.aofeng.demo.proxy;
|
||||
|
||||
/**
|
||||
* 代理调用示例。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class AccountServiceClient {
|
||||
|
||||
public static void main(String[] args) {
|
||||
AccountService as = new AccountServiceImpl();
|
||||
|
||||
// 静态代理
|
||||
AccountService staticProxy = new AccountServiceStaticProxy(as);
|
||||
staticProxy.register(null);
|
||||
staticProxy.register("A0001");
|
||||
staticProxy.login(null, null);
|
||||
staticProxy.login("A0001", "PWD0001");
|
||||
|
||||
// 动态代理
|
||||
AccountService dynamicProxy = AccountServiceDynamicProxy.newInstance(as);
|
||||
dynamicProxy.register(null);
|
||||
dynamicProxy.register("A0001");
|
||||
dynamicProxy.login(null, null);
|
||||
dynamicProxy.login("A0001", "PWD0001");
|
||||
}
|
||||
|
||||
}
|
||||
42
Java/JavaDemo/codedemo/proxy/AccountServiceDynamicProxy.java
Normal file
42
Java/JavaDemo/codedemo/proxy/AccountServiceDynamicProxy.java
Normal file
@@ -0,0 +1,42 @@
|
||||
package cn.aofeng.demo.proxy;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* 账号服务动态代理。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class AccountServiceDynamicProxy implements InvocationHandler {
|
||||
|
||||
private final static Logger _LOGGER = LoggerFactory.getLogger(AccountServiceDynamicProxy.class);
|
||||
|
||||
private AccountService _accountService;
|
||||
|
||||
public AccountServiceDynamicProxy(AccountService accountService) {
|
||||
this._accountService = accountService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
_LOGGER.debug("execute method {}, arguments: {}", method.getName(), args);
|
||||
Object result = method.invoke(_accountService, args);
|
||||
_LOGGER.debug("execute method {}, result:{}", method.getName(), result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static AccountService newInstance(AccountService accountService) {
|
||||
ClassLoader loader = accountService.getClass().getClassLoader();
|
||||
Class<?>[] interfaces = accountService.getClass().getInterfaces();
|
||||
|
||||
return (AccountService) Proxy.newProxyInstance(loader,
|
||||
interfaces,
|
||||
new AccountServiceDynamicProxy(accountService));
|
||||
}
|
||||
}
|
||||
53
Java/JavaDemo/codedemo/proxy/AccountServiceImpl.java
Normal file
53
Java/JavaDemo/codedemo/proxy/AccountServiceImpl.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package cn.aofeng.demo.proxy;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import wiremock.org.apache.commons.lang.StringUtils;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class AccountServiceImpl implements AccountService {
|
||||
|
||||
private final static Random NUM = new Random(System.currentTimeMillis());
|
||||
|
||||
@Override
|
||||
public Result register(String username) {
|
||||
if (StringUtils.isBlank(username)) {
|
||||
return createResult(4000001, "注册失败");
|
||||
}
|
||||
|
||||
User user = new User();
|
||||
user.setUid(NUM.nextInt());
|
||||
user.setNickname("用户"+user.getUid());
|
||||
return createResult(2000001, "注册成功", user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result login(String username, String password) {
|
||||
if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
|
||||
return createResult(4000001, "登录失败");
|
||||
}
|
||||
|
||||
User user = new User();
|
||||
user.setUid(NUM.nextInt());
|
||||
user.setNickname("用户"+user.getUid());
|
||||
return createResult(2000001, "登录成功", user);
|
||||
}
|
||||
|
||||
private Result createResult(int code, String msg) {
|
||||
Result result = new Result(code, msg);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Result createResult(int code, String msg, User user) {
|
||||
Result result = new Result(code, msg);
|
||||
result.setData(user);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
39
Java/JavaDemo/codedemo/proxy/AccountServiceStaticProxy.java
Normal file
39
Java/JavaDemo/codedemo/proxy/AccountServiceStaticProxy.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package cn.aofeng.demo.proxy;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* {@link AccountServiceImpl}的代理类,增加了输出入参和响应的日志。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class AccountServiceStaticProxy implements AccountService {
|
||||
|
||||
private AccountService _delegate;
|
||||
|
||||
private final static Logger _LOGGER = LoggerFactory.getLogger(AccountServiceStaticProxy.class);
|
||||
|
||||
public AccountServiceStaticProxy(AccountService accountService) {
|
||||
this._delegate = accountService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result register(String username) {
|
||||
_LOGGER.debug("execute method register, arguments: username={}", username);
|
||||
Result result = _delegate.register(username);
|
||||
_LOGGER.debug("execute method register, result:{}", result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result login(String username, String password) {
|
||||
_LOGGER.debug("execute method login, arguments: username={}, password={}", username, password);
|
||||
Result result = _delegate.login(username, password);
|
||||
_LOGGER.debug("execute method login, result:{}", result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
65
Java/JavaDemo/codedemo/proxy/Result.java
Normal file
65
Java/JavaDemo/codedemo/proxy/Result.java
Normal file
@@ -0,0 +1,65 @@
|
||||
package cn.aofeng.demo.proxy;
|
||||
|
||||
/**
|
||||
* 账号服务操作结果。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class Result {
|
||||
|
||||
/**
|
||||
* 200xxxx 表示成功。<br/>
|
||||
* 400xxxx 表示参数错误。<br/>
|
||||
* 500xxxx 表示服务内部错误。
|
||||
*/
|
||||
private int code;
|
||||
|
||||
/**
|
||||
* code对应的描述信息。
|
||||
*/
|
||||
private String msg;
|
||||
|
||||
/**
|
||||
* 只有code为200xxxx时才有值,其他情况下为null。
|
||||
*/
|
||||
private User data;
|
||||
|
||||
public Result() {
|
||||
// nothing
|
||||
}
|
||||
|
||||
public Result(int code, String msg) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public User getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(User data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Result [code=" + code + ", msg=" + msg + ", data=" + data + "]";
|
||||
}
|
||||
|
||||
}
|
||||
38
Java/JavaDemo/codedemo/proxy/User.java
Normal file
38
Java/JavaDemo/codedemo/proxy/User.java
Normal file
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package cn.aofeng.demo.proxy;
|
||||
|
||||
/**
|
||||
* 用户信息。
|
||||
*
|
||||
* @author <a href="mailto:aofengblog@163.com">聂勇</a>
|
||||
*/
|
||||
public class User {
|
||||
|
||||
private long uid;
|
||||
|
||||
private String nickname;
|
||||
|
||||
public long getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void setUid(long uid) {
|
||||
this.uid = uid;
|
||||
}
|
||||
|
||||
public String getNickname() {
|
||||
return nickname;
|
||||
}
|
||||
|
||||
public void setNickname(String nickname) {
|
||||
this.nickname = nickname;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "User [uid=" + uid + ", nickname=" + nickname + "]";
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user