Spring - JSR-250 어노테이션

2020. 8. 25. 20:11Java/Spring

반응형

- 스프링에서 기본으로 제공되지는 않지만 자바 플랫폼 공통 어노테이션인 JSR-250을 적용할 수 있다.

- 적용을 위해서는 반드시 라이브러리를 추가해야 한다.

 

1. 라이브러리 추가

 

https://mvnrepository.com/

 

Maven Repository: Search/Browse/Explore

REST Last Release on Aug 24, 2020

mvnrepository.com

위 사이트에 접속하여 jsr 250을 검색한다.

가장 위에 있는 항목을 선택한다.

javax.annotation-api를 선택한다.

버전을 선택한다.

아래 항목을 선택하여 복사한다.

 

복사한 항목을 pom.xml에 추가한다.

 

추가한 pom.xml 코드

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cookingcoding</groupId>
	<artifactId>JSR250</artifactId>
	<version>0.0.1-SNAPSHOT</version>



	<!-- xml에서 사용할 속성들 -->
	<properties>
		<!-- 자바버전 -->
		<java-version>1.8</java-version>
		<!-- 스프링 버전 -->
		<org.springframework-version>5.1.9.RELEASE</org.springframework-version>
		<!-- <org.springframework-version>4.3.25.RELEASE</org.springframework-version> -->
		<org.slfrj-version>1.7.26</org.slfrj-version>
		<ch.qos.logback-version>1.2.3</ch.qos.logback-version>
		<javax.annotation-version>1.3.2</javax.annotation-version>
	</properties>


	<dependencies>
		<!-- spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- slf4j -->
		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slfrj-version}</version>
		</dependency>
		<!-- logback -->
		<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${ch.qos.logback-version}</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
		<dependency>
			<groupId>javax.annotation</groupId>
			<artifactId>javax.annotation-api</artifactId>
			<version>${javax.annotation-version}</version>
		</dependency>

	</dependencies>
</project>

2. 어노테이션 사용

 1) @PostConstruct

@PostConstruct은 생성자 실행 후 바로 실행 될 메서드를 지정해준다.

 

TestBean1 클래스에 아래와 같이 작성하면 아래 메소드는 TestBean1의 생성자 호출 후 실행된다.

@PostConstruct
public void PostConstruct() {
	System.out.println("PostConstruct!!");
}

 2) @PreDestroy

@PreDestroy는 빈객체가 제거기 전에 실행되는 메서드를 정해준다.

 

아래 메서드는 해당 빈 객체가 삭제되기 직전에 실행된다.

@PreDestroy
public void preDestroy() {
	System.out.println("preDestroy!!");
}

 

 3) @Resource

@Resource는 name을 따라서 자동 주입을 해준다.

만약 같은 이름이 없다하면 @Resource(name="원하는 이름") 을 통해서 원하는 객체를 넣을 수 있다.

 

@Resource
public DataBean1 data1;

@Resource(name="data4")
public DataBean1 data2;

위 코드는 첫 data1은 BeanConfigClass에서 data1 이름을 가진 메서드를 찾아 객체를 주입하고, 

 

두번째 data2는 BeanConfigClass에서 data4라는 이름을 가진 메서드를 찾아서 객체를 주입한다.

 


TestBean1.java

public class TestBean1 {
	@Resource
	public DataBean1 data1;
	@Resource(name="data4")
	public DataBean1 data2;
	public TestBean1() {
		System.out.println("TestBean1의 생성자");
	}
	@PostConstruct
	public void PostConstruct() {
		System.out.println("PostConstruct!!");
	}
	
	@PreDestroy
	public void preDestroy() {
		System.out.println("preDestroy!!");
	}
	public DataBean1 getData1() {
		return data1;
	}
	public DataBean1 getData2() {
		return data2;
	}
	
	
	
}

BeanConfigClass.java

@Configuration
public class BeanConfigClass {

	@Bean
	public TestBean1 java1() {
		return new TestBean1();
	}
	
	@Bean
	public DataBean1 data4() {
		return new DataBean1();
	}
	
	@Bean
	public DataBean1 data1() {
		return new DataBean1();
	}
	
}

MainClass.java

public class MainClass {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfigClass.class);
		
		TestBean1 t1 = ctx.getBean("java1",TestBean1.class);
		System.out.println("t1=>"+t1.getData1());
		System.out.println("t2=>"+t1.getData2());
		ctx.close();
	}

}

실행결과

반응형