728x90
Annotation : 코드파일에 설정을 심을때 사용되는 설정 정보

 

xml하단 메뉴탭 Namespaces클릭 후 context 체크

 

OK

 

다시 Source로가서 추가된 열 확인 후 <context:annotation-config>태그 추가

 <context:annotation-config> : 객체를 만들면서 그 안에 어노테이션(annotation)이 있는지 확인

 


@Autowired : 자동으로 객체 연결 

id와 관계 없이 인터페이스명(아래 예제에서 Exam)으로 참조할 수 있는 객체를 자동으로 찾아서 바인딩 

@Autowired
@Override
public void setExam(Exam exam) {
	this.exam = exam;
}
  • spring.di.ui.InlineExamConsole.java파일 setExam메소드 위에 @Autowired 추가 (import)
    @Autowired : 자동으로 객체 연결 (xml파일의 <property name="exam" ref="exam"/>과 같음)
<bean id="exam" class="spring.di.entity.NewlecExam" p:kor="10" p:eng="10" />
<bean id="console" class="spring.di.ui.InlineExamConsole" >
	<!-- <property name="exam" ref="exam"/> -->
</bean>
  • xml파일 <property name="exam" ref="exam"/> 삭제

@Qualifier : 다수의 사용할 수 있는 객체가 있는 경우 id를 지정하여 연결

@Autowired
@Qualifier("exam1")
@Override
public void setExam(Exam exam) {
	this.exam = exam;
}
  • @Autowired 아래에 @Qualifier 추가 (import)
    exam1과 바인딩
<bean id="exam1" class="spring.di.entity.NewlecExam" p:kor="10" p:eng="10" />
<bean id="exam2" class="spring.di.entity.NewlecExam" p:kor="20" p:eng="20" />
<bean id="console" class="spring.di.ui.InlineExamConsole" >
</bean>

[실행결과]

total is 20, avg is 5.000000

 


@Autowired의 위치

@Autowired는 setter위 뿐만 아닌 오버로드생성자 위, 필드 위에서도 사용 가능하다

1.기본생성자에서 객체를 바인딩

public class InlineExamConsole implements ExamConsole {

	@Autowired
 	@Qualifier("exam2")   
	private Exam exam;
    
	public InlineExamConsole() {
	}    
	
	public InlineExamConsole(Exam exam) {
		this.exam = exam;
	}

//	@Autowired
//	@Qualifier("exam2")
	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}

※ 기본 생성자가 없고 오버로드 생성자만 있는 경우 인젝션이 되지 않지만,

    기본 생성자도 없고 오버로드 생성자도 없는 경우 컴파일러가 기본 생성자를 자동으로 만들어 주기 때문에 가능하다.

 

ex)

public class InlineExamConsole implements ExamConsole {

	@Autowired
 	@Qualifier("exam2")   
	private Exam exam;
    
//	public InlineExamConsole() {
//	}    
	
	public InlineExamConsole(Exam exam) {
		this.exam = exam;
	}

	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}
  • error
public class InlineExamConsole implements ExamConsole {

	@Autowired
 	@Qualifier("exam2")   
	private Exam exam;
    
//	public InlineExamConsole() {
//	}    
	
//	public InlineExamConsole(Exam exam) {
//		this.exam = exam;
//	}

	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}
  • 기본생성자를 컴파일러가 자동으로 생성

2. overload에서 객체를 바인딩

public class InlineExamConsole implements ExamConsole {

	private Exam exam;
    
	public InlineExamConsole() {
	}    
	
	@Autowired
	@Qualifier("exam2")    
	public InlineExamConsole(Exam exam) {
		this.exam = exam;
	}

//	@Autowired
//	@Qualifier("exam2")
	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}

※overload생성자에서는 다수의 Exam이 들어갈 수 있기 때문에

   @Qualifier를 각자 지정할 수 있게끔 파라미터에 설정해준다.

 

ex)

public class InlineExamConsole implements ExamConsole {

	private Exam exam;
    
	public InlineExamConsole() {
	}    
	
	@Autowired
//	@Qualifier("exam2")      
	public InlineExamConsole(@Qualifier("exam2")Exam exam) {
		this.exam = exam;
	}

	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}

 


@Autowired(required = false) : xml에 객체가 없더라도 실행

<!-- <bean id="exam1" class="spring.di.entity.NewlecExam" p:kor="10" p:eng="10" /> -->
<!-- <bean id="exam2" class="spring.di.entity.NewlecExam" p:kor="20" p:eng="20" /> -->
<bean id="console" class="spring.di.ui.InlineExamConsole" >
</bean>
@Autowired(required = false)
@Qualifier("exam2")
private 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());
}
  • xml파일의 exam1, exam2객체를 지운 후InlineExamConsole.java파일의 @Autowired에 (required = false)옵션 추가

[실행결과]

total is 0, avg is 0.000000

 


@Component : IoC 컨테이너에 스프링 빈으로 등록 

  •  xml에 <context:component-scan base-package="패키지명"/> 추가 필요
    (쉼표(,)를 사용해 다수의 패키지명 추가 가능)
    : 해당 패키지명 안에 있는 클래스를 스캔해서 컴퍼넌트가 있다면 객체화 시켜준다
    ※ <context:annotation-config /> 태그는 필요가 없어진다
  • 용도에 따라 주로 @Controller, @Service, @Repository로 사용한다

 

@Component("console")
  • xml 파일 <bean id="console"> 태그의 id와 같이 이름을 "console"로 지정

@Value : 기본 값 설정

@Component
public class NewlecExam implements Exam {

	@Value("20")
	private int kor;
	@Value("30")
	private int eng;
	private int math;
	private int com;

xml파일의 내용을 어노테이션을 통해 자바에 설정하기

<beans xmlns="http://www.springframework.org/schema/beans" ...>
	<context:component-scan base-package="spring.di.ui, spring.di.entity" />
	<bean id="exam" class="spring.di.entity.NewlecExam" />
@ComponentScan("spring.di.ui")
@Configuration
public class NewlecDIConfig {
	
	@Bean
	public Exam exam() {	//id="exam"
		return new NewlecExam();
	}
}
  • @ComponentScan : 해당 패키지명 안에 있는 클래스를 스캔해서 컴퍼넌트가 있다면 객체화 시켜준다
    @Configuration : 스프링 컨테이너를 만드는 데에 사용
    @Bean : 컨테이너에 담는 데에 사용
ApplicationContext context = 
	new AnnotationConfigApplicationContext(NewlecDIConfig.class);
//	new ClassPathXmlApplicationContext("spring/di/setting.xml");
  • Program.java파일 내 ApplicationContext 수정
    : AnotationConfigApplicationContext을 통해 클래스를 대입
728x90
List<Exam> exams = new ArrayList<>();
exams.add(new NewlecExam(1,1,1,1));

for (Exam e : exams)
	System.out.println(e);

위 ArrayList를 xml에서 생성하기

1. 

<bean id= "exams" class="java.util.ArrayList" />
  • xml에 위 코드 추가
List<Exam> exams = (List<Exam>) context.getBean("exams");//new ArrayList<>();
exams.add(new NewlecExam(1,1,1,1));

for (Exam e : exams)
	System.out.println(e);
  • new ArrayList<>(); 를 context.getBean("exams"); 로 수정 후 형변환 (List<Exam>)

[실행결과]

NewlecExam [kor=1, eng=1, math=1, com=1]

2.

<bean id = "exams" class="java.util.ArrayList">
	<constructor-arg>
		<list>
			<bean class="spring.di.entity.NewlecExam" p:kor="1" p:eng="1" />
			<ref bean = "exam"/>
		</list>
	</constructor-arg>
</bean>
  • xml <bean>태그 안쪽에 위 코드 추가
List<Exam> exams = (List<Exam>) context.getBean("exams");
//exams.add(new NewlecExam(1,1,1,1));

for (Exam e : exams)
	System.out.println(e);
  • xml에서 초기화 하였기 때문에 exams.add(new NewlecExam(1,1,1,1)); 삭제

[실행결과]

NewlecExam [kor=1, eng=1, math=0, com=0]

3.

xml하단탭 Namespaces 클릭 후 util 체크

 

OK

 

다시 Source로가서 추가된 열 확인

 

<util:list id = "exams" list-class="java.util.ArrayList">
	<bean class="spring.di.entity.NewlecExam" p:kor="1" p:eng="1" />
	<ref bean = "exam"/>
</util:list>

<!-- <bean id = "exams" class="java.util.ArrayList">
	<constructor-arg>
		<list>
			<bean class="spring.di.entity.NewlecExam" p:kor="1" p:eng="1" />
			<ref bean = "exam"/>
		</list>
	</constructor-arg>
</bean> -->

util을 사용하여 재생성

 

※ <list> : 목록을 셋팅할 때 사용, 자체만으로 객체를 만들수 없다

   <util:list> : 객체를 만들 수 있다.

728x90

내용 입력 에디터가 필요할 때 사용하는 프로그램으로, 다운받아 연결하면 간단하게 에디터를 가져와 쓸 수 있다. 

 

https://summernote.org/

 

Summernote - Super Simple WYSIWYG editor

Super Simple WYSIWYG Editor on Bootstrap Summernote is a JavaScript library that helps you create WYSIWYG editors online.

summernote.org

 

 

Getting started 클릭

 

Download compiled 클릭하여 다운받은 후 압축풀기

 

사용하고자 하는 프로젝트의 webapp폴더에 압축을 푼 파일 넣기

 

사용하고자 하는 jsp파일의 <html>태그 위에 <!DOCTYPE html>태그 추가

<!-- include libraries(jQuery, bootstrap) --> 
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> 
<script src="https://code.jquery.com/jquery-3.5.1.min.js">
</script> 
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js">
</script>
<!-- include summernote css/js -->
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.css" rel="stylesheet"> 
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.js">
</script>

<head>태그 안에 위 코드 추가

 

<script type="text/javascript">
	$(document).ready(function() {
		$('#content').summernote({
			height : 400
		});
	});
</script>

<body>태그 안에 위 코드 추가

 

 

 

'JAVA' 카테고리의 다른 글

Switch Workwpace 삭제 방법  (0) 2021.11.23
JSTL 연결하기  (0) 2021.08.10
jQuery 연결하기  (0) 2021.08.09
소켓 (Socket)  (0) 2021.08.03
Net  (0) 2021.08.03
728x90

spring.di 패키지 우클릭 → New → Other...

 

Spring폴더 Spring Bean Configuration File → Next >

 

File name 작성 후 Finish


1. property

Setter메소드를 통해 값을 설정

<?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.xsd">
	
   	<!-- Exam exam = new NewlecExam(); -->
	<bean id="exam" class="spring.di.entity.NewlecExam" />
		<!-- NewlecExam에 get, set 필요 -->
		<property name="kor" value="10" />
		<property name="eng" value="10" />
		<property name="math" value="10" />
		<!-- 이렇게도 사용 가능 -->
		<property name="com">
			<value>10</value>
		</property>
    
    
   	<!-- ExamConsole console = new InlineExamConsole();  -->
	<bean id="console" class="spring.di.ui.InlineExamConsole" >
		
		<!-- console.setExam(exam); -->
		<property name="exam" ref="exam"/>
	</bean>
	
</beans>
  • <bean>태그 : 생성할 객체 지시

    id : 어떠한 이름으로 사용할 것인지(변수명) 입력

    class : 객체화 할 클래스
    (※중복을 방지하기 위해 패키지명까지 같이 입력)

  • <property>태그 : 함수 호출 (set 생략)

    name : 호출할 함수의 이름
    (※setExam 을 property명으로 대신하여 set을 생략하고 exam으로 바뀜)

    ref : name에 들어올 객체의 이름 (타입이 reference형식일 경우 사용)
    (exam의 속성은 spring.di.entity.NewlecExam 즉 reference형식)

    value : name에 들어올 객체의 이름 (타입이 value형식일 경우 사용)
    ( ex) 10, 15, 20.. 숫자)
package spring.di;

//import spring.di.entity.Exam;
//import spring.di.entity.NewlecExam;
//import spring.di.ui.ExamConsole;
//import spring.di.ui.GridExamConsole;
//import spring.di.ui.InlineExamConsole;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.di.ui.ExamConsole;


public class Program {

	public static void main(String[] args) {
		
       		 /* 스프링에게 지시하는 방법으로 코드 변경
		Exam exam = new NewlecExam();
		ExamConsole console = new InlineExamConsole(exam);
		ExamConsole console = new GridExamConsole(exam);
    		*/
        
		//Maven 라이브러리 가져온 후 import
		ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml");
		
//		ExamConsole console = (ExamConsole) context.getBean("console");
		ExamConsole console = context.getBean(ExamConsole.class);
		console.print();
	}

}
  • [ ExamConsole console = (ExamConsole) context.getBean("console"); ] 의 형식으로 사용할 경우
    (이름으로 꺼낼 경우) object형으로 꺼내지기 때문에 캐스팅(형식 변환)을 해주어야 한다 - 번거롭다

  • [ ExamConsole console = context.getBean(ExamConsole.class); ] 의 형식으로 사용할 경우
    (자료형명으로 꺼낼 경우) 캐스팅을 해줄 필요가 없다. - 주로 선호된다

[실행결과]

total is 40, avg is 10.000000

 

 

 

2. constructor-arg

Constructor(생성자)를 통해 값을 설정

 

<?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.xsd">
	<bean id="exam" class="spring.di.entity.NewlecExam">
		<!-- NewlecExam에 consturctor 추가 -->
		<!-- <constructor-arg index="0" value = "10" /> -->
		<!-- <constructor-arg index="1" value = "20" /> -->
		<!-- <constructor-arg index="2" value = "30" /> -->
		<!-- <constructor-arg index="3" value = "40" /> -->
		<constructor-arg name="kor" value = "10" />
		<constructor-arg name="eng" value = "20" />
		<constructor-arg name="math" value = "30" />
		<constructor-arg name="com" value = "40" />
	</bean>
	<bean id="console" class="spring.di.ui.InlineExamConsole" >
		<property name="exam" ref="exam"/>
	</bean>
	
</beans>

<constructor-arg>태그에 index를 사용할 경우 값을 헷갈릴 수 있기 때문에 name을 통해 명시적으로 표현한다

 

+

 

자료형이 다를 경우 type속성을 추가로 설정해 줄 수 있다.

 

ex)

<constructor-arg name="kor" type = "float" value = "10" />
<constructor-arg name="eng" type = "float" value = "20" />
<constructor-arg name="math" type = "float" value = "30" />
<constructor-arg name="com" type = "float" value = "40" />

 

☆☆☆☆ constructor 간편하게 생성하는 법 ☆☆☆☆

constructor를 생성하고자하는 위치 우클릭 → Source → Generate Constructor using Fields...

 

Select All 해준 후 Generate

 

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 

3. 속성 설정

constructor를 사용할 때 태그가 너무 번잡하여 쉽게 사용하기 위해 사용

 

단일태그에 접두사p:속성명 을 입력하여 설정가능

 

설정이 필요한 xml파일 하단 Namespaces 클릭 → p에 체크

※Namespaces : 이름을 식별하기위해 붙여지는 접두사

 

OK

 

 

다시 Source로가서 추가된 열 확인

 

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<bean id="exam" class="spring.di.entity.NewlecExam" p:kor="10" p:eng="20" p:math="30" p:com="40"/>
	<!-- <bean id="exam" class="spring.di.entity.NewlecExam">
		<constructor-arg name="kor" value = "10" />
		<constructor-arg name="eng" value = "20" />
		<constructor-arg name="math" value = "30" />
		<constructor-arg name="com" value = "40" />
	</bean> -->
	<bean id="console" class="spring.di.ui.InlineExamConsole" >
		<property name="exam" ref="exam"/>
	</bean>
	
</beans>

'spring' 카테고리의 다른 글

어노테이션 (Annotation)  (0) 2021.09.08
Collection 생성  (0) 2021.08.30
Maven Repository 라이브러리 가져오기  (0) 2021.08.29
ApplicationContext의 종류  (0) 2021.08.29
스프링 플러그인 설치하기, 파일추가하기  (0) 2021.08.26

+ Recent posts