겉바속촉

[spring] 어노테이션 연습하기 본문

IT일기(하반기)/SPRING

[spring] 어노테이션 연습하기

겉바속촉 2020. 6. 25. 16:19
728x90
반응형

어노테이션

 

종류는 다음과 같아요


1. @Component : XML 설정없이 자동 bean 등록       
   @Component(“name”)이름지정…생략하면 클래스명(맨앞글자만소문자)

 

2. @Autowire:  자동으로 빈을 찾아서 주입(타입으로 찾음)

 

3. @Resource(name=”testBean”) : 
   특정bean이름을 찾아서 주입(모호할때 정확히 가리킬때 사용)

 

 

 

이따가 혹시 @Resource가 생성안되시는 분은

다음 코드를 pom.xml 에 추가해주세요:)

 

<!-- annotation -->

         <dependency>

            <groupId>javax.annotation</groupId>

                  <artifactId>javax.annotation-api</artifactId>

                   <version>1.3.1</version>

        </dependency>

 


 

1. DaoInter 만들기

 

여기서는 2개의 추상메서드를 생성해줍니다

insertData

deleteData

package spring.day0625.anno;

public interface DaoInter {

	//2개의 추상메서드
	public void insertData(String str);
	public void deleteData(String num);
}

 

 

 

2. MyDao 만들기

 

인터페이스 하면서 해주셔야됩니다:)

위에서 만들어준 DaoInter를 말이죠!!

 

 

 

다음과 같이 오버라이딩 되는게 보이시쥬??

 

 

코드는 다음과 같아요

 

package spring.day0625.anno;

public class MyDao implements DaoInter {

	@Override
	public void insertData(String str) {
		System.out.println("str데이타 db에 추가 성공!!!");

	}

	@Override
	public void deleteData(String num) {
		// TODO Auto-generated method stub
		System.out.println("num에 해당하는 데이타 삭제 성공!!!");
	}

}

 

 

 

3. LogicController 만들기

 

이제 컨트롤러 만들어야겠죠

클래스 MyDao가져와서 dao라고 했습니다

그리고 디폴트 생성자에 주입시켜주세요:)

 

package spring.day0625.anno;

public class LogicController {

	MyDao dao;
	
	public LogicController(MyDao dao) {
		this.dao=dao;
	}
	
	public void insert(String str)
	{
		dao.insertData(str);
	}
	
	public void delete(String num)
	{
		dao.deleteData(num);
	}
}

 

 

4. annoContext 만들기

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

  <bean id="mydao" class="spring.day0625.anno.MyDao"/>

  <bean id="logic" class="spring.day0625.anno.LogicController">
      <constructor-arg ref="mydao"/>
  </bean>
</beans>

 

 

5. LogicMain 만들기

package spring.day0625.anno;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class LogicMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ApplicationContext app1=
				new ClassPathXmlApplicationContext("oracledb/annoContext.xml");
		
		LogicController logic1=(LogicController)app1.getBean("logic");
		logic1.insert("Happy");
		logic1.delete("2");
	}

}

 

 

6. 컴파일해보기

 

 

 


 

 

이제는 어노테이션으로 변경해볼게요:)

 

 

1. MyDao

 

클래스 블럭 위에 @Component 작성!

 

package spring.day0625.anno;

import org.springframework.stereotype.Component;

@Component
public class MyDao implements DaoInter {

	@Override
	public void inserData(String str) {
		System.out.println("str데이타 db에 추가 성공!!!");

	}

	@Override
	public void deleteData(String num) {
		// TODO Auto-generated method stub
		System.out.println("num에 해당하는 데이타 삭제 성공!!!");
	}

}

 

 

2. LogicController

package spring.day0625.anno;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

@Component("logic")
public class LogicController {
	
	 
	//@Autowired //자동주입
	@Resource
	MyDao dao;
	
	public LogicController(MyDao dao) {
		this.dao=dao;
	}
	
	public void insert(String str)
	{
		dao.insertData(str);
	}
	
	public void delete(String num)
	{
		dao.deleteData(num);
	}

}

 

 

 

3. annoContext 의 경우

 

-Namespaces를 클릭해서 context 추가해주기

 

 

 

 

 

 

 

-그리고 아까 작성했던 부분은 주석처리 해주고 등록해주기

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- <bean id="mydao" class="spring.day0625.anno.MyDao"></bean>
	
	<bean id="logic" class="spring.day0625.anno.LogicController">
		<constructor-arg ref="mydao"/>
	
	</bean> -->
	
	<!-- context등록 -->
	<context:annotation-config/>
	<!-- scan할 패키지 지정, 와일드 카드도 지정 -->
	<context:component-scan base-package="spring.day0625.anno"/>

	

</beans>

 

4. 컴파일해보시면 결과는 동일합니다

 

 

 

코드블럭

 

DaoInter.java

package spring.day0625.anno;

public interface DaoInter {
	
	//2개의 추상메서드
	public void insertData(String str);
	public void deleteData(String num);

}

 

LogicController.java

package spring.day0625.anno;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

@Component("logic")
public class LogicController {
	
	 
	//@Autowired //자동주입
	@Resource
	MyDao dao;
	
	public LogicController(MyDao dao) {
		this.dao=dao;
	}
	
	public void insert(String str)
	{
		dao.insertData(str);
	}
	
	public void delete(String num)
	{
		dao.deleteData(num);
	}

}

 

MyDao.java

package spring.day0625.anno;

import org.springframework.stereotype.Component;

@Component

public class MyDao implements DaoInter {

	@Override
	public void insertData(String str) {
		System.out.println("str데이타 db에 추가 성공!!!");

	}

	@Override
	public void deleteData(String num) {
		System.out.println("num에 해당하는 데이타 삭제 성공!!!");

	}

}

annoContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- <bean id="mydao" class="spring.day0625.anno.MyDao"></bean>
	
	<bean id="logic" class="spring.day0625.anno.LogicController">
		<constructor-arg ref="mydao"/>
	
	</bean> -->
	
	<!-- context등록 -->
	<context:annotation-config/>
	<!-- scan할 패키지 지정, 와일드 카드도 지정 -->
	<context:component-scan base-package="spring.day0625.anno"/>
	

</beans>

LogicMain.java

package spring.day0625.anno;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class LogicMain {
	
	public static void main(String[] args) {
		
			ApplicationContext app1=new ClassPathXmlApplicationContext("oracledb/annoContext.xml");
			LogicController logic1=(LogicController)app1.getBean("logic");
			
			logic1.insert("Happy");
			logic1.delete("2");
			
		
		
	}

}

 

 

 

728x90
반응형