Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
希川
container-mini
提交
9ace56e9
C
container-mini
项目概览
希川
/
container-mini
通知
6
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
container-mini
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
9ace56e9
编写于
11月 10, 2021
作者:
希川
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
<fix>: 通过注解,注入属性信息失败的BUG
a. 补充单元测试
上级
2bb37d5d
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
118 addition
and
84 deletion
+118
-84
src/main/java/cn/noexception/container/context/annotation/ClassPathBeanDefinitionScanner.java
...er/context/annotation/ClassPathBeanDefinitionScanner.java
+5
-1
src/test/java/cn/noexception/test/AopTest.java
src/test/java/cn/noexception/test/AopTest.java
+8
-1
src/test/java/cn/noexception/test/ApiRunner.java
src/test/java/cn/noexception/test/ApiRunner.java
+1
-1
src/test/java/cn/noexception/test/bean/UserDao.java
src/test/java/cn/noexception/test/bean/UserDao.java
+27
-0
src/test/java/cn/noexception/test/bean/UserService.java
src/test/java/cn/noexception/test/bean/UserService.java
+40
-27
src/test/java/cn/noexception/test/bean/impl/UserService.java
src/test/java/cn/noexception/test/bean/impl/UserService.java
+0
-52
src/test/java/cn/noexception/test/event/ContextRefreshListener.java
...ava/cn/noexception/test/event/ContextRefreshListener.java
+17
-0
src/test/resources/config_aop.xml
src/test/resources/config_aop.xml
+1
-1
src/test/resources/spring-inject.xml
src/test/resources/spring-inject.xml
+18
-0
src/test/resources/spring-property.xml
src/test/resources/spring-property.xml
+1
-1
未找到文件。
src/main/java/cn/noexception/container/context/annotation/ClassPathBeanDefinitionScanner.java
浏览文件 @
9ace56e9
package
cn.noexception.container.context.annotation
;
import
cn.hutool.core.util.StrUtil
;
import
cn.noexception.container.factory.annotation.AutowiredAnnotationBeanPostProcessor
;
import
cn.noexception.container.factory.config.BeanDefinition
;
import
cn.noexception.container.factory.stereotype.Cube
;
import
cn.noexception.container.factory.support.BeanDefinitionRegistry
;
...
...
@@ -9,7 +10,7 @@ import java.util.Set;
/**
* ClassPathBeanDefinitionScanner
*
*
<p>
* 扫描包处理
*
* @author 吕滔
...
...
@@ -34,6 +35,9 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo
registry
.
registerBeanDefinition
(
determineBeanName
(
beanDefinition
),
beanDefinition
);
}
}
// 注册处理注解的 BeanPostProcessor (@Inject , @InputValue)
registry
.
registerBeanDefinition
(
"cn.noexception.container.context.annotation.internalAutowiredAnnotationProcessor"
,
new
BeanDefinition
(
AutowiredAnnotationBeanPostProcessor
.
class
));
}
private
String
determineBeanName
(
BeanDefinition
beanDefinition
)
{
...
...
src/test/java/cn/noexception/test/AopTest.java
浏览文件 @
9ace56e9
...
...
@@ -13,7 +13,7 @@ import cn.noexception.container.context.support.ClassPathXmlApplicationContext;
import
cn.noexception.test.bean.IUserService
;
import
cn.noexception.test.bean.UserServiceBeforeAdvice
;
import
cn.noexception.test.bean.UserServiceInterceptor
;
import
cn.noexception.test.bean.
impl.
UserService
;
import
cn.noexception.test.bean.UserService
;
import
org.aopalliance.intercept.MethodInterceptor
;
import
org.junit.Before
;
import
org.junit.Test
;
...
...
@@ -117,6 +117,13 @@ public class AopTest {
System
.
out
.
println
(
"测试结果:"
+
userService
.
queryUserInfo
());
}
@Test
public
void
test_inject
()
{
ClassPathXmlApplicationContext
applicationContext
=
new
ClassPathXmlApplicationContext
(
"classpath:spring-inject.xml"
);
IUserService
userService
=
applicationContext
.
getBean
(
"userService"
,
IUserService
.
class
);
System
.
out
.
println
(
"测试结果:"
+
userService
.
queryUserInfo
());
}
}
...
...
src/test/java/cn/noexception/test/ApiRunner.java
浏览文件 @
9ace56e9
...
...
@@ -54,7 +54,7 @@ public class ApiRunner {
@Test
public
void
test_dynamic
(){
// 目标对象
IUserService
userService
=
new
cn
.
noexception
.
test
.
bean
.
impl
.
UserService
();
IUserService
userService
=
new
UserService
();
// 组装代理信息
AdvisedSupport
advisedSupport
=
new
AdvisedSupport
();
advisedSupport
.
setTargetSource
(
new
TargetSource
(
userService
));
...
...
src/test/java/cn/noexception/test/bean/UserDao.java
0 → 100644
浏览文件 @
9ace56e9
package
cn.noexception.test.bean
;
import
cn.noexception.container.factory.stereotype.Cube
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* UserDao
*
* @author 吕滔
* @Date 2021/11/9 13:37
*/
@Cube
public
class
UserDao
{
private
static
Map
<
String
,
String
>
hashMap
=
new
HashMap
<>();
static
{
hashMap
.
put
(
"10001"
,
"山鸡,香港, 旺角"
);
hashMap
.
put
(
"10002"
,
"陈浩南,香港, 尖沙咀"
);
hashMap
.
put
(
"10003"
,
"大头菜,香港, 旺角"
);
hashMap
.
put
(
"10004"
,
"肥嗨,香港, 旺角"
);
}
public
String
queryUserName
(
String
uId
)
{
return
hashMap
.
get
(
uId
);
}
}
src/test/java/cn/noexception/test/bean/UserService.java
浏览文件 @
9ace56e9
package
cn.noexception.test.bean
;
public
class
UserService
{
private
String
uId
;
private
String
company
;
private
String
location
;
private
IUserDao
userDao
;
import
cn.noexception.container.factory.annotation.Inject
;
import
cn.noexception.container.factory.annotation.InputValue
;
import
cn.noexception.container.factory.stereotype.Cube
;
public
String
queryUserInfo
()
{
return
userDao
.
queryUserName
(
uId
)
+
","
+
company
+
","
+
location
;
}
import
java.util.Random
;
public
String
getuId
()
{
return
uId
;
}
/**
* UserService
*
* @author 吕滔
* @Date 2021/11/3 17:01
*/
@Cube
(
"userService"
)
public
class
UserService
implements
IUserService
{
public
void
setuId
(
String
uId
)
{
this
.
uId
=
uId
;
}
@InputValue
(
"${token}"
)
private
String
token
;
public
String
getCompany
()
{
return
company
;
}
@Inject
private
UserDao
userDao
;
public
void
setCompany
(
String
company
)
{
this
.
company
=
company
;
@Override
public
String
queryUserInfo
()
{
try
{
Thread
.
sleep
(
new
Random
(
1
).
nextInt
(
100
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
userDao
.
queryUserName
(
"10001"
)
+
", "
+
token
;
}
public
String
getLocation
()
{
return
location
;
@Override
public
String
register
(
String
userName
)
{
try
{
Thread
.
sleep
(
new
Random
(
1
).
nextInt
(
100
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
"注册用户:"
+
userName
+
" success! "
;
}
public
void
setLocation
(
String
location
)
{
this
.
location
=
location
;
@Override
public
String
toString
()
{
return
"UserService#token = { "
+
token
+
" }"
;
}
public
IUserDao
getUserDao
()
{
return
userDao
;
public
String
getToken
()
{
return
token
;
}
public
void
set
UserDao
(
IUserDao
userDao
)
{
this
.
userDao
=
userDao
;
public
void
set
Token
(
String
token
)
{
this
.
token
=
token
;
}
}
src/test/java/cn/noexception/test/bean/impl/UserService.java
已删除
100644 → 0
浏览文件 @
2bb37d5d
package
cn.noexception.test.bean.impl
;
import
cn.noexception.container.factory.stereotype.Cube
;
import
cn.noexception.test.bean.IUserService
;
import
java.util.Random
;
/**
* UserService
*
* @author 吕滔
* @Date 2021/11/3 17:01
*/
@Cube
(
"userService"
)
public
class
UserService
implements
IUserService
{
private
String
token
;
@Override
public
String
queryUserInfo
()
{
try
{
Thread
.
sleep
(
new
Random
(
1
).
nextInt
(
100
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
"希川,100000,广州"
;
}
@Override
public
String
register
(
String
userName
)
{
try
{
Thread
.
sleep
(
new
Random
(
1
).
nextInt
(
100
));
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
"注册用户:"
+
userName
+
" success! "
;
}
@Override
public
String
toString
()
{
return
"UserService#token = { "
+
token
+
" }"
;
}
public
String
getToken
()
{
return
token
;
}
public
void
setToken
(
String
token
)
{
this
.
token
=
token
;
}
}
src/test/java/cn/noexception/test/event/ContextRefreshListener.java
0 → 100644
浏览文件 @
9ace56e9
package
cn.noexception.test.event
;
import
cn.noexception.container.ApplicationListener
;
import
cn.noexception.container.context.event.ContextRefreshEvent
;
/**
* ContextRefreshListener
*
* @author 吕滔
* @Date 2021/11/10 16:56
*/
public
class
ContextRefreshListener
implements
ApplicationListener
<
ContextRefreshEvent
>
{
@Override
public
void
onApplicationEvent
(
ContextRefreshEvent
event
)
{
System
.
out
.
println
(
"容器初始化完成"
);
}
}
src/test/resources/config_aop.xml
浏览文件 @
9ace56e9
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean
id=
"userService"
class=
"cn.noexception.test.bean.
impl.
UserService"
/>
<bean
id=
"userService"
class=
"cn.noexception.test.bean.UserService"
/>
<bean
class=
"cn.noexception.container.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
/>
...
...
src/test/resources/spring-inject.xml
0 → 100644
浏览文件 @
9ace56e9
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:context=
"http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context"
>
<bean
class=
"cn.noexception.container.factory.PropertyPlaceholderConfigurer"
>
<property
name=
"location"
value=
"classpath:token.properties"
/>
</bean>
<bean
class=
"cn.noexception.test.event.ContextRefreshListener"
/>
<context:component-scan
base-package=
"cn.noexception.test.bean"
/>
</beans>
\ No newline at end of file
src/test/resources/spring-property.xml
浏览文件 @
9ace56e9
...
...
@@ -10,7 +10,7 @@
<property
name=
"location"
value=
"classpath:token.properties"
/>
</bean>
<bean
id=
"userService"
class=
"cn.noexception.test.bean.
impl.
UserService"
>
<bean
id=
"userService"
class=
"cn.noexception.test.bean.UserService"
>
<property
name=
"token"
value=
"${token}"
/>
</bean>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录