티스토리 뷰

카테고리 없음

[Jspring] annotaion 방식 1

박강균 IT 2021. 4. 7. 17:22

xml을 거치지 않고 Bean을 호출하는 방식중 하나를 소개하려고한다. 

AdminConnection.java

package com.java.tes;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class AdminConnection implements InitializingBean, DisposableBean{
	
	private String adminId;
	private String adminPw;
	private String sub_adminId;
	private String sub_adminPw;
	
	public String getAdminId() {
		return adminId;
	}
	public void setAdminId(String adminId) {
		this.adminId = adminId;
	}
	public String getAdminPw() {
		return adminPw;
	}
	public void setAdminPw(String adminPw) {
		this.adminPw = adminPw;
	}
	public String getSub_adminId() {
		return sub_adminId;
	}
	public void setSub_adminId(String sub_adminId) {
		this.sub_adminId = sub_adminId;
	}
	public String getSub_adminPw() {
		return sub_adminPw;
	}
	public void setSub_adminPw(String sub_adminPw) {
		this.sub_adminPw = sub_adminPw;
	}
	@Override
	public void destroy() throws Exception {
		System.out.println("destroy()");
	}
	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("afterPropertiesSet()");
	}
	

}

 

adminId와 adminPw Sub_adminId와 Sub_adminPw 값을 받는 클래스 이고

Override된 destroy()와 afterPropertiesSet() 중 destroy() Bean의 소멸시기를 알아보기 위한 

afterProperties는 값이 모두 입력됬는지 알아보는 메서드입니다 

 

 

 

ApplicationConfig.java

package com.java.tes;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;


@Configuration
public class ApplicationConfig {
	
	@Value("${admin.id}")
	private String adminId;
	@Value("${admin.pw}")
	private String adminPw;
	@Value("${sub_admin.id}")
	private String sub_adminId;
	@Value("${sub_admin.pw}")
	private String sub_adminPw;
	
	
	@Bean //1Bean
	public static PropertySourcesPlaceholderConfigurer Properties() {
		PropertySourcesPlaceholderConfigurer configurer
		= new PropertySourcesPlaceholderConfigurer();
		
		Resource[] locations = new Resource[2];
		locations[0] = new ClassPathResource("admin1.properties");
		locations[1] = new ClassPathResource("admin2.properties");
		configurer.setLocations(locations);
		
		return configurer;
		
	}
	
	@Bean //2Bean
	public AdminConnection adminConfig() {
		AdminConnection adminConnection = new AdminConnection();
		adminConnection.setAdminId(adminId);
		adminConnection.setAdminPw(adminPw);
		adminConnection.setSub_adminId(sub_adminId);
		adminConnection.setSub_adminPw(sub_adminPw);
		return adminConnection;
		
	}

}

 

@Configuration는 Bean을 불러오기 위한 준비단계이고 

@Value Property안에 있는 값을 가져와서 적용해줍니다.

이 Value를 가져오기 위한 준비로 ${가져오기위한 property안에 있는 값}를 해줘야합니다.  

밑에 보면 private String (변수명)이 있는데 가져온값을 이곳에 주입해줍니다. 

 

@Bean을 통해 Bean으로 지정할 부분을 정해줍니다. 이때 Bean의 id는 Bean밑에  선언된 메서드입니다. 

@Bean //2Bean
	public AdminConnection adminConfig() {
		AdminConnection adminConnection = new AdminConnection();
		adminConnection.setAdminId(adminId);
		adminConnection.setAdminPw(adminPw);
		adminConnection.setSub_adminId(sub_adminId);
		adminConnection.setSub_adminPw(sub_adminPw);
		return adminConnection;
		
	}

해당부분에서 Bean의 아이디는 adminConfig() 입니다. 

밑의 Properties는 static을 활용해 만든 메서드입니다. 

이 메서드는 해당 클래스가 호출되면 자동으로 사용되는 메서드입니다. 

그래서 경로값을 정해두면 이 메서드가 가장 먼저 호출됩니다. 

 

public static PropertySourcesPlaceholderConfigurer Properties() {
		PropertySourcesPlaceholderConfigurer configurer
		= new PropertySourcesPlaceholderConfigurer();
		
		Resource[] locations = new Resource[2];
		locations[0] = new ClassPathResource("admin.properties");
		locations[1] = new ClassPathResource("admin2.properties");
		configurer.setLocations(locations);
		
		return configurer;
		
	}

즉 부분에서는 값을 가져올 xml의 파일의 경로를 지정해줍니다. 

순서를 정리하면 

경로지정> 해당 경로에 있는 값을 가져와서 value값에 넣어줌 >그 Value값을 adminConfig()안에 넣어줌

mainclass에 호출되서 

실행

 

 

package com.java.tes;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainClass {
	
	public static void main(String[] args) {
		

		AnnotationConfigApplicationContext ctx= new
				AnnotationConfigApplicationContext(ApplicationConfig.class); // 클래스 등록 ApplicationConfig 안의 내용을 읽기 위해
		
		AdminConnection connection
		= ctx.getBean("adminConfig", AdminConnection.class);
		
		System.out.println("adminID : "+ connection.getAdminId());
		System.out.println("adminPW : "+ connection.getAdminPw());
		System.out.println("sub_adminID : "+ connection.getSub_adminId());
		System.out.println("sub_adminPW : "+ connection.getSub_adminPw());
		
		ctx.close();
	}

}

 

이제 메인에서 값이 저장된 해당 값들을 불러와 볼게요 

ctx라는 변수안에 ApplicationConfig라는 클래스를 등록하고 

커넥션을 ctx.getBean을 통해 자기 가 지정한 Bean의 아이디값을 가져오고,

print문을 통해 출력했습니다. 

아래는 properties 파일입니다 참고하면 좋을 것 같습니다. 

admin.id=admin
admin.pw=12345
sub_admin.id=subadmin
sub_admin.pw=123451
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함