Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
byit-myth-job
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liyuan
byit-myth-job
Commits
8f6f4a7b
Commit
8f6f4a7b
authored
Apr 09, 2020
by
huangfusuper
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Netty客户端启动类修改
parent
a8f2d061
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
129 additions
and
0 deletions
+129
-0
PluginSpringClientFactory.java
...main/java/com/byit/factory/PluginSpringClientFactory.java
+129
-0
No files found.
byit-plugin-core/myth-plugin-rpc-client/src/main/java/com/byit/factory/PluginSpringClientFactory.java
0 → 100644
View file @
8f6f4a7b
package
com
.
byit
.
factory
;
import
com.byit.client.NettyPluginClient
;
import
com.byit.client.PluginClient
;
import
com.byit.executor.handler.interfaces.IJobHandler
;
import
com.byit.init.PluginClientInitialization
;
import
com.byit.registry.DataSourceServiceRegistry
;
import
com.byit.registry.PluginServiceRegistry
;
import
com.byit.rpc.remoting.invoker.route.LoadBalance
;
import
com.byit.task.annotations.TaskClient
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.BeanFactory
;
import
org.springframework.beans.factory.BeanFactoryAware
;
import
org.springframework.beans.factory.DisposableBean
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter
;
import
org.springframework.util.ReflectionUtils
;
/**
* spring 方式实现的插件端 客户端 实现工厂
* @author huangfu
*/
public
class
PluginSpringClientFactory
extends
InstantiationAwareBeanPostProcessorAdapter
implements
InitializingBean
,
DisposableBean
,
BeanFactoryAware
{
private
PluginClientFactory
pluginClientFactory
;
private
Class
<?
extends
PluginServiceRegistry
>
pluginServiceRegistryClass
;
private
Class
<?
extends
PluginClient
>
pluginClientClass
;
@Value
(
"${myth.register.url}"
)
private
String
registryUrl
;
@Value
(
"${myth.plugin.env}"
)
private
String
env
;
@Value
(
"${myth.plugin.biz}"
)
private
String
biz
;
public
PluginSpringClientFactory
(
Class
<?
extends
PluginServiceRegistry
>
pluginServiceRegistryClass
,
Class
<?
extends
PluginClient
>
pluginClientClass
)
{
this
.
pluginServiceRegistryClass
=
pluginServiceRegistryClass
;
this
.
pluginClientClass
=
pluginClientClass
;
if
(
this
.
pluginServiceRegistryClass
==
null
)
{
this
.
pluginServiceRegistryClass
=
DataSourceServiceRegistry
.
class
;
}
if
(
this
.
pluginClientClass
==
null
)
{
this
.
pluginClientClass
=
NettyPluginClient
.
class
;
}
}
public
PluginSpringClientFactory
(
Class
<?
extends
PluginServiceRegistry
>
pluginServiceRegistryClass
,
String
registryUrl
,
String
env
,
String
biz
,
Class
<?
extends
PluginClient
>
pluginClientClass
)
{
;
this
.
pluginServiceRegistryClass
=
pluginServiceRegistryClass
;
this
.
registryUrl
=
registryUrl
;
this
.
env
=
env
;
this
.
biz
=
biz
;
this
.
pluginClientClass
=
pluginClientClass
;
if
(
this
.
pluginServiceRegistryClass
==
null
)
{
this
.
pluginServiceRegistryClass
=
DataSourceServiceRegistry
.
class
;
}
if
(
this
.
pluginClientClass
==
null
)
{
this
.
pluginClientClass
=
NettyPluginClient
.
class
;
}
}
/**
* 属性设置之后调用
* @throws Exception
*/
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
pluginClientFactory
=
new
PluginClientFactory
(
pluginServiceRegistryClass
,
registryUrl
,
biz
,
env
);
pluginClientFactory
.
start
();
}
/**
* bean进行实例化后的后期处理 能够拿到每一个bean的实例 插手bean的实例化后的属性注入
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public
boolean
postProcessAfterInstantiation
(
final
Object
bean
,
final
String
beanName
)
throws
BeansException
{
Class
<?>
beanClass
=
bean
.
getClass
();
//寻找bean中每一个带有注解的操作 对其进行代理
ReflectionUtils
.
doWithFields
(
beanClass
,
field
->
{
if
(
field
.
isAnnotationPresent
(
TaskClient
.
class
))
{
//获取改属性的接口
Class
<?>
iFace
=
field
.
getType
();
if
(!
iFace
.
isInterface
())
{
throw
new
RuntimeException
(
"该服务属性必须是接口类型的!"
);
}
TaskClient
taskClientAnn
=
field
.
getAnnotation
(
TaskClient
.
class
);
String
callbackUrl
=
taskClientAnn
.
callbackUrl
();
LoadBalance
loadBalance
=
taskClientAnn
.
loadBalance
();
long
timeout
=
taskClientAnn
.
timeout
();
PluginClientInitialization
pluginClientInitialization
=
new
PluginClientInitialization
(
callbackUrl
,
timeout
,
loadBalance
,
pluginClientFactory
,
iFace
,
pluginClientClass
);
Object
proxyObject
=
pluginClientInitialization
.
getObject
();
field
.
setAccessible
(
true
);
field
.
set
(
bean
,
proxyObject
);
}
});
return
super
.
postProcessAfterInstantiation
(
bean
,
beanName
);
}
/**
* 能够获取bean工厂
* @param beanFactory
* @throws BeansException
*/
@Override
public
void
setBeanFactory
(
BeanFactory
beanFactory
)
throws
BeansException
{
}
/**
* bean被销毁时 自动调用
* @throws Exception
*/
@Override
public
void
destroy
()
throws
Exception
{
pluginClientFactory
.
close
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment