Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
西红柿炒蛋不加盐
guide-rpc-framework
提交
2f8decaf
G
guide-rpc-framework
项目概览
西红柿炒蛋不加盐
/
guide-rpc-framework
与 Fork 源项目一致
Fork自
嗝屁小孩纸 / guide-rpc-framework
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
guide-rpc-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2f8decaf
编写于
6月 19, 2020
作者:
L
lvxuhong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
客户端整合spring
上级
f910b033
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
276 addition
and
0 deletion
+276
-0
rpc-framework-spring/src/main/java/github/javaguide/ClientProxy.java
...rk-spring/src/main/java/github/javaguide/ClientProxy.java
+19
-0
rpc-framework-spring/src/main/java/github/javaguide/ClientTest.java
...ork-spring/src/main/java/github/javaguide/ClientTest.java
+21
-0
rpc-framework-spring/src/main/java/github/javaguide/Config.java
...amework-spring/src/main/java/github/javaguide/Config.java
+17
-0
rpc-framework-spring/src/main/java/github/javaguide/spring/annotation/RpcServiceScan.java
...va/github/javaguide/spring/annotation/RpcServiceScan.java
+19
-0
rpc-framework-spring/src/main/java/github/javaguide/spring/annotation/RpcServiceScannerRegistrar.java
...vaguide/spring/annotation/RpcServiceScannerRegistrar.java
+49
-0
rpc-framework-spring/src/main/java/github/javaguide/spring/rpcservice/RpcServiceFactoryBean.java
...ub/javaguide/spring/rpcservice/RpcServiceFactoryBean.java
+50
-0
rpc-framework-spring/src/main/java/github/javaguide/spring/rpcservice/Scanner.java
...main/java/github/javaguide/spring/rpcservice/Scanner.java
+60
-0
rpc-framework-spring/src/main/java/github/javaguide/spring/service/Service1.java
...c/main/java/github/javaguide/spring/service/Service1.java
+6
-0
rpc-framework-spring/src/main/java/github/javaguide/spring/service/Service2.java
...c/main/java/github/javaguide/spring/service/Service2.java
+10
-0
rpc-framework-spring/src/test/java/ClientTest.java
rpc-framework-spring/src/test/java/ClientTest.java
+25
-0
未找到文件。
rpc-framework-spring/src/main/java/github/javaguide/ClientProxy.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide
;
import
github.javaguide.proxy.RpcClientProxy
;
import
github.javaguide.remoting.transport.ClientTransport
;
import
github.javaguide.remoting.transport.netty.client.NettyClientTransport
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
public
class
ClientProxy
{
public
static
<
T
>
T
getServiceProxy
(
Class
<
T
>
serviceClass
)
{
ClientTransport
rpcClient
=
new
NettyClientTransport
();
RpcClientProxy
rpcClientProxy
=
new
RpcClientProxy
(
rpcClient
);
return
rpcClientProxy
.
getProxy
(
serviceClass
);
}
}
rpc-framework-spring/src/main/java/github/javaguide/ClientTest.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
public
class
ClientTest
{
public
static
void
main
(
String
[]
args
)
{
AnnotationConfigApplicationContext
applicationContext
=
new
AnnotationConfigApplicationContext
();
applicationContext
.
register
(
Config
.
class
);
applicationContext
.
refresh
();
applicationContext
.
start
();
}
}
rpc-framework-spring/src/main/java/github/javaguide/Config.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide
;
import
github.javaguide.spring.annotation.RpcServiceScan
;
import
org.springframework.context.annotation.Configuration
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
@Configuration
@RpcServiceScan
(
"github.javaguide.spring.service"
)
//@Import(RpcServiceScannerRegistrar.class)
public
class
Config
{
}
rpc-framework-spring/src/main/java/github/javaguide/spring/annotation/RpcServiceScan.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide.spring.annotation
;
import
org.springframework.context.annotation.Import
;
import
java.lang.annotation.*
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Target
(
ElementType
.
TYPE
)
@Documented
@Import
(
RpcServiceScannerRegistrar
.
class
)
public
@interface
RpcServiceScan
{
String
value
();
}
rpc-framework-spring/src/main/java/github/javaguide/spring/annotation/RpcServiceScannerRegistrar.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide.spring.annotation
;
import
github.javaguide.spring.rpcservice.Scanner
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.context.ResourceLoaderAware
;
import
org.springframework.context.annotation.ImportBeanDefinitionRegistrar
;
import
org.springframework.core.annotation.AnnotationAttributes
;
import
org.springframework.core.io.ResourceLoader
;
import
org.springframework.core.type.AnnotationMetadata
;
import
org.springframework.core.type.classreading.MetadataReader
;
import
org.springframework.core.type.classreading.MetadataReaderFactory
;
import
org.springframework.core.type.filter.TypeFilter
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
public
class
RpcServiceScannerRegistrar
implements
ImportBeanDefinitionRegistrar
,
ResourceLoaderAware
{
private
ResourceLoader
resourceLoader
;
@Override
public
void
registerBeanDefinitions
(
AnnotationMetadata
importingClassMetadata
,
BeanDefinitionRegistry
registry
)
{
AnnotationAttributes
annoAttrs
=
AnnotationAttributes
.
fromMap
(
importingClassMetadata
.
getAnnotationAttributes
(
RpcServiceScan
.
class
.
getName
()));
Scanner
scanner
=
new
Scanner
(
registry
);
String
value
=
annoAttrs
.
getString
(
"value"
);
if
(
resourceLoader
!=
null
)
{
scanner
.
setResourceLoader
(
resourceLoader
);
}
//所有的接口全部注入
scanner
.
addIncludeFilter
(
new
TypeFilter
()
{
@Override
public
boolean
match
(
MetadataReader
metadataReader
,
MetadataReaderFactory
metadataReaderFactory
)
{
return
true
;
}
});
scanner
.
doScan
(
value
);
}
@Override
public
void
setResourceLoader
(
ResourceLoader
resourceLoader
)
{
this
.
resourceLoader
=
resourceLoader
;
}
}
rpc-framework-spring/src/main/java/github/javaguide/spring/rpcservice/RpcServiceFactoryBean.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide.spring.rpcservice
;
import
github.javaguide.ClientProxy
;
import
org.springframework.beans.factory.FactoryBean
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
public
class
RpcServiceFactoryBean
<
T
>
implements
FactoryBean
<
T
>
{
private
Class
<
T
>
rpcServiceInterface
;
public
RpcServiceFactoryBean
()
{
}
public
RpcServiceFactoryBean
(
Class
<
T
>
rpcServiceInterface
)
{
this
.
rpcServiceInterface
=
rpcServiceInterface
;
}
@Override
public
T
getObject
()
throws
Exception
{
if
(
rpcServiceInterface
==
null
)
{
throw
new
IllegalStateException
(
""
);
}
return
ClientProxy
.
getServiceProxy
(
rpcServiceInterface
);
// return (T) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{rpcServiceInterface}, new InvocationHandler() {
// @Override
// public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
// if(method.equals()){}
// return null;
// }
// });
}
@Override
public
Class
<?>
getObjectType
()
{
return
rpcServiceInterface
;
}
@Override
public
boolean
isSingleton
()
{
return
false
;
}
}
rpc-framework-spring/src/main/java/github/javaguide/spring/rpcservice/Scanner.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide.spring.rpcservice
;
import
org.springframework.beans.factory.annotation.AnnotatedBeanDefinition
;
import
org.springframework.beans.factory.config.BeanDefinition
;
import
org.springframework.beans.factory.config.BeanDefinitionHolder
;
import
org.springframework.beans.factory.support.AbstractBeanDefinition
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.beans.factory.support.GenericBeanDefinition
;
import
org.springframework.context.annotation.ClassPathBeanDefinitionScanner
;
import
java.util.Arrays
;
import
java.util.Set
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
public
class
Scanner
extends
ClassPathBeanDefinitionScanner
{
private
RpcServiceFactoryBean
<
Object
>
rpcServiceFactoryBean
=
new
RpcServiceFactoryBean
<>();
public
Scanner
(
BeanDefinitionRegistry
registry
)
{
super
(
registry
);
}
@Override
public
Set
<
BeanDefinitionHolder
>
doScan
(
String
...
basePackages
)
{
//父类在扫描的时候 beanDefinition 会通过 registry 注册,我们需要修改 beanDefinition 的 beanClass
Set
<
BeanDefinitionHolder
>
beanDefinitions
=
super
.
doScan
(
basePackages
);
processBeanDefinitions
(
beanDefinitions
);
return
beanDefinitions
;
}
/**
* 主要是将beanDefinition 的beanClass 设置成我们自定义的FactoryBean
*
* @param beanDefinitions
*/
private
void
processBeanDefinitions
(
Set
<
BeanDefinitionHolder
>
beanDefinitions
)
{
GenericBeanDefinition
definition
;
for
(
BeanDefinitionHolder
beanDefinitionHolder
:
beanDefinitions
)
{
definition
=
(
GenericBeanDefinition
)
beanDefinitionHolder
.
getBeanDefinition
();
definition
.
getConstructorArgumentValues
().
addGenericArgumentValue
(
definition
.
getBeanClassName
());
definition
.
setBeanClass
(
rpcServiceFactoryBean
.
getClass
());
definition
.
setAutowireMode
(
AbstractBeanDefinition
.
AUTOWIRE_BY_TYPE
);
}
}
/**
* {@inheritDoc}
*/
@Override
protected
boolean
isCandidateComponent
(
AnnotatedBeanDefinition
beanDefinition
)
{
return
beanDefinition
.
getMetadata
().
isInterface
()
&&
beanDefinition
.
getMetadata
().
isIndependent
();
}
}
rpc-framework-spring/src/main/java/github/javaguide/spring/service/Service1.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide.spring.service
;
public
interface
Service1
{
}
rpc-framework-spring/src/main/java/github/javaguide/spring/service/Service2.java
0 → 100644
浏览文件 @
2f8decaf
package
github.javaguide.spring.service
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
public
interface
Service2
{
}
rpc-framework-spring/src/test/java/ClientTest.java
0 → 100644
浏览文件 @
2f8decaf
import
github.javaguide.Config
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
org.springframework.context.support.GenericApplicationContext
;
/**
* @description:
* @author:lvxuhong
* @date:2020/6/18
*/
public
class
ClientTest
{
public
static
void
main
(
String
[]
args
)
{
AnnotationConfigApplicationContext
applicationContext
=
new
AnnotationConfigApplicationContext
();
applicationContext
.
register
(
Config
.
class
);
applicationContext
.
refresh
();
applicationContext
.
start
();
String
[]
beanDefinitionNames
=
applicationContext
.
getBeanDefinitionNames
();
for
(
String
s
:
beanDefinitionNames
)
{
System
.
out
.
println
(
s
);
}
applicationContext
.
getBean
(
"Service1"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录