# mini-framework **Repository Path**: hpc622/mini-framework ## Basic Information - **Project Name**: mini-framework - **Description**: ICO DI AOP RPC 仅用于学习其原理 - **Primary Language**: Unknown - **License**: 0BSD - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-08-15 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: rpc, ICO, aop, DI ## README # mini-web-framework #### 介绍 运用ICO DI AOP RPC概念实现简单的类似于springboot的web框架 #### 使用说明 #### @Bootstrap 注解的使用,使用该注解启动程序,如果有导入mini-web将启动一个web服务,否则为普通应用 @Bootstrap public class WebBootDemoApplication { public static void main(String[] args) throws Exception { MiniApplication.start(WebBootDemoApplication.class, args); } } #### @Asepct 注解使用,使用该注解来声明一个切面 @Order注解用来定义切面顺序 @Inject用来注入mini容器管理的对象@Point用来声明切点 @Aspect @Order(-1) public class TestAspect { @Inject("print") private IPrintService iPrintService; @Point("java.lang.String origin.mini.boot.controller.*.*(..)") public Object test(IAspectChain iAspectChain) throws Throwable { iPrintService.print("in method TestAspect "); Object proceed = iAspectChain.proceed(); iPrintService.print("out method TestAspect "); return proceed; } } #### @Config 用来声明注入配置,并把配置对象交给容器维护,可指定前缀 @Config("person") @Data public class Person { private String name; private int age; private int sex; private String[] hand; private Person sonPerson; } #### @RestHandler 注解用来声明改类为控制器类且返回数据为json形式,@RequestMapping注解用来声明请求路径,可指定请求方式,@Val注解用来注入配置中的数据,@Param 用来将请求数据中指定的 key的value只设置进去 @RestHandler @RequestMapping("/test") public class TestController { @Inject private ITestService iTestService; @Val("${server.port}") private String port; @Val("${server.name}") private String name; @Inject private Person person; @RequestMapping(value = "/getString") public String getString(Person person2, JSONObject json, @Param("name") String name) { return iTestService.testService(port + ":" + person.getName() + ":" + person2.getName() + ":" + json.getString("name") + ":" + name); } } #### @Container 表名该类交给容器维护,可指定名称 @Container("print") public class PrintServiceImpl implements IPrintService { @Override public void print(String str) { System.out.println(str + this.getClass().getName()); } } #### @ProviderService 用来声明一个接口是否为服务提供接口,将会扫描且注入到注册中心,提供服务,可指定版本 @ProviderService public class UserServiceImpl implements IUserService { @Override public String getUserName(int id) { return "hpc " + id; } } #### @EnableRpcServer 用来指定应用开启提供服务 @Bootstrap @EnableRpcServer(registerAddress = "192.168.0.89:2181") public class RpcDemoServerApplication { public static void main(String[] args) throws Exception { MiniApplication.start(RpcDemoServerApplication.class, args); System.in.read(); } } #### @EnableRpcClient 用来指定应用开启消费服务 @Bootstrap @EnableRpcClient(registerAddress = "192.168.0.89:2181") public class RpcDemoClientApplication { public static void main(String[] args) throws Exception { MiniApplication.start(RpcDemoClientApplication.class, args); } } #### @ConsumerService声明你要调的服务,可以指定版本 @RestHandler @RequestMapping("/user") public class UserController { @ConsumerService(version = "1.1") private IUserService iUserService; @RequestMapping(value = "/id", method = {RequestMethod.POST}) public JSONObject getUserById(@RequestBody JSONObject obj) { int userId = obj.getIntValue("userId"); String userName = iUserService.getUserName(userId); obj.put("userName", userName); return obj; } }