객체 생성과 @Component

    console 부분 주석처리

    객체 생성을 위한 설정하기

    패키지를 지정해주지 않으면 오류가 뜬다.

    Program.java

    패키지를 생성하는 코드를 xml에 넣어줘도 에러가 발생하게 된다,.

    그럴 경우 객체를 호출할 때 class로 해야 한다.

     

    id로 호출할 경우 @component에 ()를 추가해 id를 적어준다.

     

    NewlecExam 객체 만들기

     

    setting.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:p="http://www.springframework.org/schema/p"
    	xmlns:util="http://www.springframework.org/schema/util"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
    	
    	<context:component-scan base-package="spring.di.ui, spring.di.entity" />
    	<!-- Exam exam = new NewIecExam(); -->
    	<!-- <bean id="exam1" class="spring.di.entity.NewIecExam" p:kor="10"  p:eng="10" />
    	<bean id="exam2" class="spring.di.entity.NewIecExam" p:kor="20"  p:eng="20" /> -->
    	<!-- 	
    	<bean id="exam" class="spring.di.entity.NewIecExam" >
    		<constructor-arg name="kor" value="10" />
    		<constructor-arg name="math" value="10" />
    		<constructor-arg name="com" value="10" />
    		<constructor-arg name="eng" value="10" />
    	</bean> 
    	-->
    	<!-- ExamConsole console = new InlineExamConsole(); -->
    <!-- 	<bean id="console" class="spring.di.ui.InlineExamConsole" >
    		console.setExam(exam);
    		<property name="exam" ref="exam" />
    	</bean>	 -->
    	
    	<!-- 컬랙션 실제로 객체를 만드는 능력 -->
    	<!-- <util:list id="exams" list-class="java.util.ArrayList">
    		<bean class="spring.di.entity.NewIecExam" p:kor="1"  p:eng="1" /> 직접생성
    		<ref bean="exam" /> 위에 참조
    	</util:list> -->
    	
    	<!-- ArrayList를 생성자로 넘기는 방식 -->
    	<!-- <bean id="exams" class="java.util.ArrayList">
    		<constructor-arg>
    			<list>
    				<bean class="spring.di.entity.NewIecExam" p:kor="10"  p:eng="10" /> 직접생성
    				<ref bean="exam" /> 위에 참조
    			</list>
    		</constructor-arg>
    	</bean> -->
    </beans>

     

    Program.java

    package spring.di;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import spring.di.entity.Exam;
    import spring.di.entity.NewIecExam;
    import spring.di.ui.ExamConsole;
    import spring.di.ui.GridExamConsole;
    import spring.di.ui.InlineExamConsole;
    
    public class Program {
    
    	public static void main(String[] args) {
    		
    		/* 스프링에게 지시하는 방법으로 코드를 변경
    		 * Exam exam = new NewIecExam();
    		 * Exam exam = new NewIecExam(10,10,10,10); 
    		 * ExamConsole console = new GridExamConsole();
    		 * 
    		 * console.setExam(exam);
    		 */
    		
    		//지시서 읽어들이기
    		ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml");
    		
    		//Exam exam = context.getBean(Exam.class);
    		//System.out.println(exam.toString());
    		
    		ExamConsole console = (ExamConsole) context.getBean("console"); //id로 꺼내기
    		//ExamConsole console = context.getBean(ExamConsole.class); //(가르키는 인터페이스 형식에 찹조하는 객체를 찾아준다.) 클래스명으로 가져오기
    		console.print();
    		
    		//List<Exam> exams = (List<Exam>) context.getBean("exams"); //new ArrayList<>();
    		//exams.add(new NewIecExam(1,1,1,1));
    		
    		//for(Exam e : exams)
    		//	System.out.println(e);
    		
    	}
    
    }

     

    InlineExamConsole.java

    package spring.di.ui;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Component;
    
    import spring.di.entity.Exam;
    
    @Component("console")
    public class InlineExamConsole implements ExamConsole {
    	
    	@Autowired
    	//@Qualifier("exam2")	
    	private Exam exam;
    	
    	public InlineExamConsole() {
    		System.out.println("constructor");
    	}
    	
    	public InlineExamConsole(Exam exam) {
    		System.out.println("overloaded constructor");
    		this.exam = exam;
    	}
    
    	@Override
    	public void print() {
    		if(exam == null)
    			System.out.printf("total is %d, avg is %f\n ", 0, 0.0);
    		else
    			System.out.printf("total is %d, avg is %f\n ", exam.total(), exam.avg());
    	}
    	
    	@Override
    	public void setExam(Exam exam) {
    		System.out.println("setter");
    		this.exam = exam;
    		
    	}
    
    }

     

    NewIecExam.java

    package spring.di.entity;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class NewIecExam implements Exam {
    	
    	private int kor;
    	private int eng;
    	private int math;
    	private int com;
    	
    	//생성자
    	public NewIecExam() {
    		// TODO Auto-generated constructor stub
    	}
    	
    	//생성자 오버로드
    	public NewIecExam(int kor, int eng, int math, int com) {
    		super();
    		this.kor = kor;
    		this.eng = eng;
    		this.math = math;
    		this.com = com;
    	}
    
    	public int getKor() {
    		return kor;
    	}
    
    	public void setKor(int kor) {
    		this.kor = kor;
    	}
    
    	public int getEng() {
    		return eng;
    	}
    
    	public void setEng(int eng) {
    		this.eng = eng;
    	}
    
    	public int getMath() {
    		return math;
    	}
    
    	public void setMath(int math) {
    		this.math = math;
    	}
    
    	public int getCom() {
    		return com;
    	}
    
    	public void setCom(int com) {
    		this.com = com;
    	}
    
    	@Override
    	public int total() {
    		// TODO Auto-generated method stub
    		return kor+eng+math+com;
    	}
    
    	@Override
    	public float avg() {
    		// TODO Auto-generated method stub
    		return total() / 4.0f;
    	}
    
    	@Override
    	public String toString() {
    		return "NewIecExam [kor=" + kor + ", eng=" + eng + ", math=" + math + ", com=" + com + "]";
    	}
    	
    
    }

    @Component의 종류

    @Component에서 초기값 설정하기

    @Value 어노테이션 사용

    @Controller @Service @Repository는 컴포넌트와 같지만 역할로서의 의미가 부여되고 있는

    @Component 어노테이션이다. -> 역할을 명시화 할 수 있다.

     

     


    Java Configuration

    java 코드에서 설정을 심어놓고 xml에 있는 설정을 지웠었다.

    Spring을 사용할 경우 설정을 선택하는 것이 좋다.  xml로만 할 건지 어노테이션으로만 할건지 선택해야 한다.

    어노테이션으로만 작성하기

    xml. 파일 자체를 java파일로 바꾸기

    @baen 사용

    지시서 작성방식의 변경

    Program.java에서 지시서 읽어 들이는 코드 변경

    Program.java

    package spring.di;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import spring.di.entity.Exam;
    import spring.di.entity.NewIecExam;
    import spring.di.ui.ExamConsole;
    import spring.di.ui.GridExamConsole;
    import spring.di.ui.InlineExamConsole;
    
    public class Program {
    
    	public static void main(String[] args) {
    		
    		/* 스프링에게 지시하는 방법으로 코드를 변경
    		 * Exam exam = new NewIecExam();
    		 * Exam exam = new NewIecExam(10,10,10,10); 
    		 * ExamConsole console = new GridExamConsole();
    		 * 
    		 * console.setExam(exam);
    		 */
    		
    		//지시서 읽어들이기
    		ApplicationContext context = new AnnotationConfigApplicationContext(NewlecDIConfig.class);
    				
    				//new ClassPathXmlApplicationContext("spring/di/setting.xml");
    		
    		//Exam exam = context.getBean(Exam.class);
    		//System.out.println(exam.toString());
    		
    		ExamConsole console = (ExamConsole) context.getBean("console"); //id로 꺼내기
    		//ExamConsole console = context.getBean(ExamConsole.class); //(가르키는 인터페이스 형식에 찹조하는 객체를 찾아준다.) 클래스명으로 가져오기
    		console.print();
    		
    		//List<Exam> exams = (List<Exam>) context.getBean("exams"); //new ArrayList<>();
    		//exams.add(new NewIecExam(1,1,1,1));
    		
    		//for(Exam e : exams)
    		//	System.out.println(e);
    		
    	}
    
    }

     

    NewlecDIConfig.java

    package spring.di;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    import spring.di.entity.Exam;
    import spring.di.entity.NewIecExam;
    
    @ComponentScan("spring.di.ui")
    @Configuration
    public class NewlecDIConfig {
    	
    	@Bean
    	public Exam exam() {
    		return new NewIecExam();
    	}
    }
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading