자바 체험 IOC

2990 단어
1. 스프링 베이스 양 대 사상 중 IOC (Inverse Of Control) 체험
2. IOC 가 반전 을 제어 할 때 주로 자바 의 강력 한 반사 체 제 를 이용한다.
여기에 데이터 층 을 쓰 지 않 았 습 니 다. 관심 있 는 학생 들 은 흐름 을 통 해 우리 가 필요 로 하 는 대상 을 만 들 수 있 습 니 다.
1) testreck 가방 을 만 들 고 MockSpring 클래스 를 쓰 는 방법 getBean
package testreflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Scanner;

public class MockSpring {
    public Object getBean (String className) {
        Object obj = null;
        Scanner input = new Scanner(System.in);
        try{
            //   
            Class clazz = Class.forName(className);
            //    
            obj = clazz.newInstance();
            String name = clazz.getSimpleName();
            if(name.equals("Character")){
                System.out.println("Incompatible Type.");
            }else{
                Field[] fields = clazz.getDeclaredFields();
                for(Field f:fields){
                    String fieldName = f.getName();
                    System.out.println("   "+fieldName+"  :");
                    //  setName           
                    StringBuilder sb = new StringBuilder("set");
                    sb.append(fieldName.substring(0,1).toUpperCase().concat(fieldName.substring(1)));
                    String value = input.nextLine();
                    //       ,  name String 
                    Class fieldType = f.getType();
                    //   String       
                    Constructor con = fieldType.getConstructor(String.class);
                    //    
                    Method m = clazz.getDeclaredMethod(sb.toString(),fieldType);
                    m.setAccessible(true);
                    m.invoke(obj,con.newInstance(value));
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return obj;
    }
}

2) 테스트 클래스 만 들 기
메모: set 방법 이 있어 야 합 니 다. 나중에 파일 에서 읽 은 흐름 을 대상 으로 바 꾸 는 것 이 목적 입 니 다.
package testreflect;

public class Person {
    private String name;
    private Integer age;
    private String sex;
    public Person () {}
    public Person (String name,Integer age,String sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public void setName (String name){
        this.name = name;
    }
    public void setAge (Integer age){
        this.age = age;
    }
    public void setSex (String sex){
        this.sex = sex;
    }
    public String getName (){
        return this.name;
    }
}

3) 테스트
package testreflect;

public class Test {
    public static void main (String[] args){
        MockSpring ms = new MockSpring();
        Person p = (Person)ms.getBean("testreflect.Person");
        System.out.println(p.getName());
    }
}

4) 알림 설정 name, age, sex 속성 은 "비 홍", "18", "남"
출력: 비 홍

좋은 웹페이지 즐겨찾기