겉바속촉
[spring] 어노테이션 연습하기 본문
어노테이션
종류는 다음과 같아요
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");
}
}
'IT일기(하반기) > SPRING' 카테고리의 다른 글
[spring] MVC (0) | 2020.06.26 |
---|---|
[spring] 어노테이션 @Resource 연습 (0) | 2020.06.25 |
[spring] 생성자, setter 주입 각각 연습하기 (0) | 2020.06.25 |
[spring] 생성자 + setter까지 주입해보기 (0) | 2020.06.25 |
[spring] 생성자 주입해보기 (0) | 2020.06.25 |