利用自定义J a v a 注解实现资源注入 这里是想介绍一下如何通过Java 的注解机制,实现对bean 资源的注入。主要介绍实现的方法,至于例子的实用性不必讨论。 需求:一个应用有两个数据库,分别为DB-A,DB-B。 假设持久层框架使用iBatis 来实现,那么SqlMapClient 对象在创建时,对于两个不同的DB连接要有两个不同的SqlMapClient 对象, 假设我们有一个Service 类为MyService.java,该类中有两个SqlMapClient 对象sqlMapA、sqlMapB 分别对应着 DB-A、DB-B。 先看看我们的SqlMapClient.java 类:(自定义SqlMapClient 类,用来演示。) import java.util.Map; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; @SuppressWarnings("unchecked") public class SqlMapClient { public SqlMapClient(String s, String t) { sqlMap = s; type = t; } public SqlMapClient() { } private String type = null; private String sqlMap = null; // get、set 方法 略 // 用于演示查询后返回一个String 的返回结果 public String selectForObject(String sql, Map in) { return this.toString(); } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("sqlMap", sqlMap) .append("type", type).toString(); } } MyService.java 类实现: import java.util.Map; @SuppressWarnings("unchecked") public class MyService { @DataSource(type="B", sqlMap="com/annotation/sql-map-config-B.xml") private SqlMapClient sqlMapB = null; @DataSource(type="A", sqlMap="com/annotation/sql-map-config-A.xml") private SqlMapClient sqlMapA = null; // get、set 方法 略 // 模拟在 DB-B 数据库取得数据 public String selectForObjectFromB(String sql, Map in) { return sqlMapB.selectForObject("", null); } // 模拟在DB-A 数据库取得数据 public String selectForObjectFromA(String sql, Map in) { return sqlMapA.selectForObject("", null); } } 接下来就是我们的注解类:DataSource.java import java.lang.annotation.ElementType; import java.lang.annotatio...