본문 바로가기
반응형

IT/Java394

의존관계 주입시 Bean이 없을때 예전 포스팅에서 의존관계 생성자 주입에 대해서 다룬 포스팅이 있다. 자세한 내용은 참고 포스팅을 참고 바란다. 코드에서 Bean을 불러오는 코드가 아래와 같이 있다. @Autowired public void method(Test test) { System.out.println("TestBean = " + test); } 겉으로만 봤을땐 문제가 없어보이지만 문제가 생기는 경우는 Test라는 클래스가 Bean에 들어가있지 않을 경우에 에러가 난다. 그럴 경우엔 3가지 방식으로 회피를 할수 있다. autowired(required=false) 필수값 설정을 false로 설정 @Autowired(required=false) public void method(Test test) { System.out.printl.. 2023. 7. 22.
디컴파일에 대해(.jar 파일, .class파일) 자바로 작성된 .java 파일을 컴파일 돌리게 되면 .class파일로 컴파일이 된 후 클래스 파일이 생긴다. 이 파일은 JVM 에서 해석이 가능하고 사람이 물리적으로 열더라도 내용을 바로 읽지는 못한다. 그럴때 필요한 것이 디컴파일이다. 다양한 방법이 존재하겠지만 이번 포스팅에서는 jd-gui 를 소개하려고 한다. 이클립스에서 plugin 으로도 설치가 가능하고 윈도우를 사용한다면 .exe파일이 존재한다. 그리고 .jar 파일도 있기에 java 명령어로 실행이 가능하다. http://java-decompiler.github.io/ Java Decompiler The “Java Decompiler project” aims to develop tools in order to decompile and anal.. 2023. 7. 21.
Log level 에 대해 이전에 로그 관련된 포스팅을 다룬적이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 로그에서는 로그를 남길 수 있는 레벨이라는게 존재한다. 결론 먼저 말하면 TRACE < DEBUG 2023. 7. 17.
spring.main.allow-bean-definition-overriding=true 자바Bean중복 에러 spring boot 에서 아래와 같은 에러가 발생하였다. *************************** APPLICATION FAILED TO START *************************** Description: The bean 'commonFilter', defined in class path resource [/ApiConfig.class], could not be registered. A bean with that name has already been defined in file [D:\SourceEclipse-2020.06\CommonFilter.class] and overriding is disabled. Action: Consider renaming one of the b.. 2023. 7. 15.
@Transactional 사용시 주의 사항2 (내부호출 / AOP 내부호출) 이전 포스팅에서 Transactional annotation에 대해서 다뤘었다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 해당 포스팅에서 언급했었고, Spring AOP 기능에서 이슈가 있는 내부호출에 대한 내용을 다뤄볼 것이다. 먼저 아래 코드를 읽어보면, public class TestTransactionAnnotationController { public void transactionalTest() { serviceA.insertValue(); this.internal(); } @Transactional public void internal() { serviceA.insertValue(); serviceA.insertValue(); serviceA.insertValue(); throw new.. 2023. 7. 11.
@Transactional annotation spring에서 사용하는 annotation 중 하나인 이 Transactional annotation에 대해 소개하려고 한다. 사용은 메서드 상단에 설정을 해준다. 예제는 아래와 같다. @Transactional public void interal() { serviceA.transactionalTest(); serviceA.transactionalTest(); serviceA.transactionalTest(); throw new ExceptionEx("errr"); } 이미 검색을 하고 들어온 순간부터 Transactional 이라는 애가 뭘 하는 애인지는 알거라 생각하지만 간단히 설명하면 스프링 내에서 AOP 원리로 동작을 하며 Transactional 로 묶어둔 메서드가 시작부터 종료할때까지 모든.. 2023. 7. 10.
Cannot construct instance of Dto 에러 API 호출시 requestBody 를 통해서 DTO를 받아올때. Cannot construct instance of TestDto 이라는 에러가 발생하면서 DTO가 생성이 안되었다. 내부적으로 데이터를 구성할때 필요한 생성자가 없어서 생기는 에러. @NoArgsConstructor 를 설정 해주면 해결 된다. NoArgsConstructor 만 설정할 경우 빈 생성자만 생성이 가능하여. 나는 AllArgsConstructor 도 같이 설정을 해주곤 한다. 이 설정을 하려면 lombok이 필요한데, 아래 참고 포스팅에서 lombok 관련 내용 참고 바란다. 참고 포스팅 https://thenicesj.tistory.com/52 [java] lombok 사용법 mvc 패턴을 사용하다 보면 dto나 vo에 .. 2023. 7. 6.
Optional<List<Entity>> 잘못된 표기법 제목에 있는 그대로 내용을 다뤄볼것이다. 시작하기 앞서 Optional 에 대해서는 아래 참고 포스팅을 참고 바란다. Optional은 안에 값이 null인지 아닌지를 판별해주는 자바 8부터 지원되는 기능이다. JPA를 사용하면서 findBy 와 같은 쿼리메서드를 사용하면서 인자값을 optional로 받곤 하는데 list를 받을때 optional 을 사용하는 잘못된 코드를 발견하여 이렇게 포스팅으로 남겨둔다. 올바른 표기법은 둘중 하나이다. - Optional test - List test Optional test 위에껀 먼저 Entity 라는 항목이 null이거나 있거나이다. 이 기능은 findby 쿼리 메서드를 사용할 경우엔 Primary 한 값에 설정을 주로 해주며 1개만 있는 값을 받을때 사용한다.. 2023. 6. 30.
[Spring] BeanDefinition 이란? 결론 먼저 말하면 스프링 빈의 설정 메타 정보이고 Bean등록한 것들마다 하나씩 메타 정보가 생성이 된다. 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성하곤 한다. 이전에는 xml 위주로, 그리고 어느순간부터는 자바코드로, 그리고 지금은 어노테이션 등으로 빈 설정을 지원하고, 이 지원하는게 가능한 것이 바로 BeanDefinition 이라는 추상화가 있기에 가능하다. 아래 그림을 먼저 보면 BeanDefinition은 interface로 생성이 되어 역할을 갖고 아래 AppConfig 들이 각각 구현이 된다. 그리고 좀더 자세하게는 아래 그림을 보면 위에 AppConfig 를 그냥 읽는것이 아닌 ApplicationContext 에서 가능하게 한다. 그럼 BeanDefinition의 메타 정.. 2023. 6. 29.
반응형