Skip to content

Commit c4ecfa3

Browse files
committed
引入DAOConfig,将数据源等组建开放出给插件使用
1 parent 0cbc977 commit c4ecfa3

File tree

5 files changed

+116
-34
lines changed

5 files changed

+116
-34
lines changed

paoding-rose-jade/src/main/java/net/paoding/rose/jade/context/JadeInvocationHandler.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,12 @@ public class JadeInvocationHandler implements InvocationHandler {
7070

7171
public JadeInvocationHandler(//
7272
DAOMetaData daoMetaData,//
73-
InterpreterFactory interpreterFactory, //
74-
RowMapperFactory rowMapperFactory,//
75-
DataAccessFactory dataAccessFactory,//
7673
CacheProvider cacheProvider, //
7774
StatementWrapperProvider statementWrapperProvider) {
7875
this.daoMetaData = daoMetaData;
79-
this.rowMapperFactory = rowMapperFactory;
80-
this.dataAccessFactory = dataAccessFactory;
81-
this.interpreterFactory = interpreterFactory;
76+
this.rowMapperFactory = daoMetaData.getConfig().getRowMapperFactory();
77+
this.dataAccessFactory = daoMetaData.getConfig().getDataAccessFactory();
78+
this.interpreterFactory = daoMetaData.getConfig().getInterpreterFactory();
8279
this.cacheProvider = cacheProvider;
8380
this.statementWrapperProvider = statementWrapperProvider;
8481
}

paoding-rose-jade/src/main/java/net/paoding/rose/jade/context/application/JadeFactory.java

+9-8
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,24 @@
1919

2020
import javax.sql.DataSource;
2121

22+
import org.springframework.util.ClassUtils;
23+
2224
import net.paoding.rose.jade.context.JadeInvocationHandler;
2325
import net.paoding.rose.jade.dataaccess.DataAccessFactoryAdapter;
2426
import net.paoding.rose.jade.dataaccess.DataSourceFactory;
2527
import net.paoding.rose.jade.dataaccess.datasource.SimpleDataSourceFactory;
2628
import net.paoding.rose.jade.rowmapper.DefaultRowMapperFactory;
2729
import net.paoding.rose.jade.rowmapper.RowMapperFactory;
30+
import net.paoding.rose.jade.statement.DAOConfig;
2831
import net.paoding.rose.jade.statement.DAOMetaData;
2932
import net.paoding.rose.jade.statement.DefaultInterpreterFactory;
3033
import net.paoding.rose.jade.statement.Interpreter;
3134
import net.paoding.rose.jade.statement.StatementWrapperProvider;
3235
import net.paoding.rose.jade.statement.cached.CacheProvider;
3336

34-
import org.springframework.util.ClassUtils;
35-
3637
/**
3738
*
38-
* @author qieqie
39+
* @author 王志亮 [qieqie.wang@gmail.com]
3940
*
4041
*/
4142
//BUG: @SQL中的 :1.create_date应该抛出错误而非返回null
@@ -99,11 +100,11 @@ public void addInterpreter(Interpreter... interpreters) {
99100
@SuppressWarnings("unchecked")
100101
public <T> T create(Class<?> daoClass) {
101102
try {
102-
DAOMetaData daoMetaData = new DAOMetaData(daoClass);
103-
JadeInvocationHandler handler = new JadeInvocationHandler(
104-
//
105-
daoMetaData, interpreterFactory, rowMapperFactory, dataAccessFactory,
106-
cacheProvider, statementWrapperProvider);
103+
DAOConfig config = new DAOConfig(dataAccessFactory, rowMapperFactory,
104+
interpreterFactory);
105+
DAOMetaData daoMetaData = new DAOMetaData(daoClass, config);
106+
JadeInvocationHandler handler = new JadeInvocationHandler(daoMetaData, cacheProvider,
107+
statementWrapperProvider);
107108
ClassLoader classLoader = ClassUtils.getDefaultClassLoader();
108109
return (T) Proxy.newProxyInstance(classLoader, new Class[] { daoClass }, handler);
109110
} catch (RuntimeException e) {

paoding-rose-jade/src/main/java/net/paoding/rose/jade/context/spring/JadeFactoryBean.java

+17-16
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,20 @@
1717

1818
import java.lang.reflect.Proxy;
1919

20+
import org.springframework.beans.factory.FactoryBean;
21+
import org.springframework.beans.factory.InitializingBean;
22+
import org.springframework.util.Assert;
23+
import org.springframework.util.ClassUtils;
24+
2025
import net.paoding.rose.jade.context.JadeInvocationHandler;
2126
import net.paoding.rose.jade.dataaccess.DataAccessFactory;
2227
import net.paoding.rose.jade.rowmapper.RowMapperFactory;
28+
import net.paoding.rose.jade.statement.DAOConfig;
2329
import net.paoding.rose.jade.statement.DAOMetaData;
2430
import net.paoding.rose.jade.statement.InterpreterFactory;
2531
import net.paoding.rose.jade.statement.StatementWrapperProvider;
2632
import net.paoding.rose.jade.statement.cached.CacheProvider;
2733

28-
import org.springframework.beans.factory.FactoryBean;
29-
import org.springframework.beans.factory.InitializingBean;
30-
import org.springframework.util.Assert;
31-
import org.springframework.util.ClassUtils;
32-
3334
/**
3435
*
3536
*
@@ -51,7 +52,7 @@ public class JadeFactoryBean implements FactoryBean, InitializingBean {
5152
protected CacheProvider cacheProvider;
5253

5354
protected Object daoObject;
54-
55+
5556
// 可选的
5657
private StatementWrapperProvider statementWrapperProvider;
5758

@@ -110,11 +111,11 @@ public void setCacheProvider(CacheProvider cacheProvider) {
110111
public CacheProvider getCacheProvider() {
111112
return cacheProvider;
112113
}
113-
114+
114115
public StatementWrapperProvider getStatementWrapperProvider() {
115116
return statementWrapperProvider;
116117
}
117-
118+
118119
public void setStatementWrapperProvider(StatementWrapperProvider statementWrapperProvider) {
119120
this.statementWrapperProvider = statementWrapperProvider;
120121
}
@@ -144,16 +145,16 @@ public Object getObject() {
144145

145146
protected Object createDAO() {
146147
try {
147-
DAOMetaData daoMetaData = new DAOMetaData(objectType);
148-
JadeInvocationHandler handler = new JadeInvocationHandler(
149-
//
150-
daoMetaData, interpreterFactory, rowMapperFactory, dataAccessFactory,
151-
cacheProvider, statementWrapperProvider);
148+
DAOConfig config = new DAOConfig(dataAccessFactory, rowMapperFactory,
149+
interpreterFactory);
150+
DAOMetaData daoMetaData = new DAOMetaData(objectType, config);
151+
JadeInvocationHandler handler = new JadeInvocationHandler(daoMetaData, cacheProvider,
152+
statementWrapperProvider);
152153
return Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(),
153-
new Class[] { objectType }, handler);
154+
new Class[] { objectType }, handler);
154155
} catch (RuntimeException e) {
155-
throw new IllegalStateException("failed to create bean for "
156-
+ this.objectType.getName(), e);
156+
throw new IllegalStateException(
157+
"failed to create bean for " + this.objectType.getName(), e);
157158
}
158159
}
159160

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright 2009-2015 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License i distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package net.paoding.rose.jade.statement;
17+
18+
import net.paoding.rose.jade.dataaccess.DataAccessFactory;
19+
import net.paoding.rose.jade.rowmapper.RowMapperFactory;
20+
21+
/**
22+
* 支持DAO类的基础配置(数据源配置、SQL解析器配置、OR映射配置等等)
23+
*
24+
* @author 王志亮 [qieqie.wang@gmail.com]
25+
*
26+
*/
27+
public class DAOConfig {
28+
29+
private final DataAccessFactory dataAccessFactory;
30+
31+
private final RowMapperFactory rowMapperFactory;
32+
33+
private final InterpreterFactory interpreterFactory;
34+
35+
public DAOConfig(DataAccessFactory dataAccessFactory, //
36+
RowMapperFactory rowMapperFactory, //
37+
InterpreterFactory interpreterFactory) {
38+
this.dataAccessFactory = dataAccessFactory;
39+
this.rowMapperFactory = rowMapperFactory;
40+
this.interpreterFactory = interpreterFactory;
41+
}
42+
43+
/**
44+
* 标准数据访问器配置
45+
*
46+
* @return
47+
*/
48+
public DataAccessFactory getDataAccessFactory() {
49+
return dataAccessFactory;
50+
}
51+
52+
/**
53+
* SQL解析器配置
54+
*
55+
* @return
56+
*/
57+
public InterpreterFactory getInterpreterFactory() {
58+
return interpreterFactory;
59+
}
60+
61+
/**
62+
* OR映射配置
63+
*
64+
* @return
65+
*/
66+
public RowMapperFactory getRowMapperFactory() {
67+
return rowMapperFactory;
68+
}
69+
70+
}

paoding-rose-jade/src/main/java/net/paoding/rose/jade/statement/DAOMetaData.java

+17-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.Collections;
1919
import java.util.Map;
2020

21-
2221
/**
2322
* {@link DAOMetaData} 封装缓存一个DAO接口类本身的一些信息,比如类对象、类常量等等
2423
*
@@ -27,6 +26,11 @@
2726
*/
2827
public class DAOMetaData {
2928

29+
/**
30+
*
31+
*/
32+
private final DAOConfig config;
33+
3034
/**
3135
* DAO接类
3236
*/
@@ -41,16 +45,25 @@ public class DAOMetaData {
4145
*
4246
* @param daoClass
4347
*/
44-
public DAOMetaData(Class<?> daoClass) {
48+
public DAOMetaData(Class<?> daoClass, DAOConfig config) {
4549
this.daoClass = daoClass;
4650
this.constants = Collections.unmodifiableMap(//
47-
GenericUtils.getConstantFrom(daoClass, true, true));
51+
GenericUtils.getConstantFrom(daoClass, true, true));
52+
this.config = config;
53+
}
54+
55+
/**
56+
* 支持本DAO类的基础配置(数据源配置、解析器配置、OR映射配置等等)
57+
* @return
58+
*/
59+
public DAOConfig getConfig() {
60+
return config;
4861
}
4962

5063
public Class<?> getDAOClass() {
5164
return daoClass;
5265
}
53-
66+
5467
/**
5568
* 泛型类型变量在本DAO类中真正的类型
5669
*

0 commit comments

Comments
 (0)