??????????????Spring???????????????????????????????????Spring?????????????????
?????ù?Spring???????????Spring????????????????????????????????????????????????????????????????????Spring???????????????????п???Spring????????????????????Spring???????????????????????????????????????????Spring.
?????????????????????????ó?????????DAO???????????????????????IUserDao?????????????User??????????????д????????UserDaoImpl?????IUserDao?е??????????????service?????????????Spring?????????????????????????????????????????????????????????????????????????????????????
????????????????????μ???
????<code>public interface IUserDao {
????public void setData(String data);
????public String getData();
????}
????public class UserDaoImpl implements IUserDao{
????@Override
????public void setData(String data) {
????System.out.println("data is : " + data);
????}
????@Override
????public String getData() {
????return "just test";
????}
????}</code>
????????FieldInject????????д???????????嶨??????
????<code>@Target(ElementType.FIELD)
????@Retention(RetentionPolicy.RUNTIME)
????@Documented
????public @interface FieldInject {
????//???????Щ??????????????
????}
????</code>
??????????????????????????壬?????????????????????????????
????????????????????????????????????????????????
????????????????????????Class????????????????????Class?????????Щ??????????????????????????????
????//???濪????
????for(int i=0; i<field.length; i++){="" fieldinject="" annotation="field[i].getAnnotation(FieldInject.class);" if(annotation="" !="null){//??????????????????" ????????????????????="" string="" fullclassname="field[i].getType().getName();" class="" sub="findSubClass(fullClassName);" if(sub="=" null)="" continue;="" ??????????="" lowcase="set" +field[i].getname();="" ????setter??????????????????????????="" injectmethod(method??obj??="" sub??="" lowcase.tolowercase());="" ???????????="" injectfield(field[i]??obj??sub);="" }="" }<="" code=""></field.length;></code>
????????δ????У????????????????????????FieldInject????????????????????С?????ж??????????ó???????????????????????????????????????????????????ó??????????????????????
????????1??????????????????
????????2????????
????????2??y???????????????д???setter????????????????method.invoke()?????????ò???????????field???????????????????????1???????????????????
????Spring?ж??????????????簴?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????<code>    //??????????????漰??Spring?????????
????private Class findSubClass(String fullClassName){
????try {
????Class target = Class.forName(fullClassName);
????//??????????????????????????
????if(!target.isInterface()){
????boolean isAbs = Modifier.isAbstract(target.getModifiers());
????if(!isAbs) return target;
????}
????int size = clazzList.size();
????for(int i=0; i<size; i++){="" class="" p="clazzList.get(i);" if(p.getsuperclass()="" !="null" &&="" p.getsuperclass().getname().equals(fullclassname))="" return="" p;="" class[]="" inter="p.getInterfaces();" for(class="" c="" :="" inter){="" if(c.getname().equals(fullclassname))="" }="" catch="" (classnotfoundexception="" e)="" {="" todo="" auto-generated="" block="" e.printstacktrace();="" null;="" }<="" code=""></size;></code>
????findSubClass????????????????????????????Spring?и?????????????????????????????????????????????????????ɡ?????????У??????Щ?????ж??????????????????????????????????????????????????????????????????????????????????????????????????classList????????????????????????????????????????????????????setter???????????????????????????????????????滻?????injectMethod??????????????????ɡ?
????<code>field[i].setAccessible(true);
????field[i].set(target?? obj);</code>
????injectMethod?????????????????Method?е??????????????setter????(?????????field?????????ж??)????????????????????ɡ?????????????????????????????д??????????????Щ?????????????á?????????????????????????·??????????????????????github????????????????????е??????????github??