tonykang22 / study

0 stars 0 forks source link

[The JAVA, 코드 조작] 3부. 리플렉션 #22

Open tonykang22 opened 2 years ago

tonykang22 commented 2 years ago

3부. 리플렉션

1. 스프링의 Depedency Injection은 어떻게 동작할까?

@Service
public class BookService {

    @Autowired
    BookRepository bookRepository;

}


2. 리플렉션 API 1부: 클래스 정보 조회


예시


클래스에 접근하는 방법 3 가지.

public class Main {

    public static void main(String[] args) throws ClassNotFoundException {
        Class<Book> bookClass = Book.class;

        Book book = new Book();
        Class<? extends Book> aClass = book.getClass();

        Class<?> aClass1 = Class.forName("april.apr11st.Book");
    }
}



콜렉션이 제공하는 기능으로 클래스의 정보를 가져올 수 있다.


3. 애노테이션과 리플렉션


예시


@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Target(ElementType.TYPE)
public @interface HelloAnnotation {

    String name();

    int age() default 500;

}


4. 리플렉션 API 2부: 클래스 정보 수정 또는 실행


예시


public class Main {

    public static void main(String[] args) throws ... {
        Class<Car> carClass = Car.class;
        Constructor<?> constructor = carClass.getConstructor(null);
        Car car = (Car) constructor.newInstance();
        System.out.println(car);

        Field a = Car.class.getDeclaredField("b");
        a.setAccessible(true);
        System.out.println(a.get(car));
        a.set(car, "BBBB");
        System.out.println(a.get(car));
    }
}


5. 나만의 DI 프레임워크 만들기

}


<br>

- ContainerService.java
```java
public static <T> T getObject(T classType)


6. 리플렉션 정리