일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파일질라설치오류
- toFixed()
- selectedIndex
- Excel
- SUB함수
- 주석이 먹히지 않을 때
- 증가값
- push오류
- is_check
- calc.minus
- selectoptions
- FileZilla설치
- hide
- excel중복체크
- Math.ceil()
- addClass
- Git
- Parent
- 파일질라다운로드
- ctrl+/
- 소스트리인증실패
- removeClass
- 1521
- index %
- FileZilla다운로드
- Math.floor()
- 파일질라설치
- Math.round()
- calc.plus
- slideUp
- Today
- Total
잡동사니에도 사랑을
[21.11.08] (Chapter02) 본문
2. 전달인자가 2개 이상인 경우
기본데이터 타입일 경우에는 value 요소를 사용하여 의존관계를 연결시키기 위한 값을 지정
public class Foo {
public Foo(int a, String b) { }
}
[applicationContext.xml]
<bean id="foo" class="Foo">
<constructor-arg>
<value>25</value>
</constructor-arg>
<constructor-arg value="Hello" />
</bean>
-----------------------------------
<bean id="foo" class="Foo">
<constructor-arg index="1" value="Hello" />
<constructor-arg index="0">
<value>25</value>
</constructor-arg>
</bean>
3. type 속성을 이용하여 지정
[applicationContext.xml]
<bean id="foo" class="Foo">
<constructor-arg type="int" value="25" />
<constructor-arg type="java.lang.String" value="Hello" />
</bean>
나. Setter Injection
: setter메소드를 이용하여 의존 관계를 연결시키는 것을 말한다.
: <property>요소의 name 속성을 이용하여 값의 의존 관계를 연결시킬 대상이 되는 필드값을 지정한다
public class Foo {
private Bar bar;
public void setBar(Bar bar){
this.bar = bar;
}
}
[applicationContext.xml]
<bean id="foo" class="Foo">
<property name="bar" ref="bar"></property>
</bean>
<bean id="bar" class="Bar" />
[실습]
Project : chapter02
Project : chapter02_SpringMaven
Project : chapter02
Package : sample01
Interface : MessageBean.java
Class : MessageBeanImpl.java
HelloSpring.java - main()
src : applicationContext.xml
////////applicationContext.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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="messageBeanImpl" class="sample01.MessageBeanImpl">
<constructor-arg>
<value>포도</value>
</constructor-arg>
<property name="cost">
<value>12000</value>
</property>
<property name="qty" value="5" />
</bean>
</beans>
////////////////MessageBeanImpl.java - chapter01_SpringMaven
아래의 Injection들을 모두 지우거나 주석처리하고 롬복을 끌어오는 방법
@Data - Setter, Getter, 기본생성자, toString(), hashCode(), squals()
기본생성자가 있는데 또 가져오려고 하면 에러가 떨어진다.
Setter Getter를 잡을 때 위치를 잘 설정해야 한다.
@Setter의 위치를 클래스 위에 바로 걸 경우, setFruit(String)까지 나오는 것을 알 수 있다.
@Setter의 위치를 변수 위에 걸 경우, setFruit(String)은 나오지 않고 Cost와 Qty만 나오는 것을 알 수 있다.
[결과]
@Component를 하게 되면, 생성자는 선언을 하지 않아도 자동으로 읽지만
@Setter는 절대 읽지 않으니,
@Autowired를 시켜주게 되면 자동을 Setter Getter를 잡아주게 된다.
package sample01;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@RequiredArgsConstructor
public class MessageBeanImpl implements MessageBean {
@NonNull
private String fruit;
@Setter
private int cost, qty;
public void MessageBeanImpl() {
System.out.println("MessageBeanImpl 기본 생성자");
}
/*
// Constructor Injection
public MessageBeanImpl(String fruit) {
this.fruit = fruit;
}
//Setter Injection
public void setCost(int cost) {
this.cost = cost;
}
public void setQty(int qty) {
this.qty = qty;
}
*/
@Override
public void sayHello() {
System.out.println(fruit + "\t" + cost + "\t" + qty);
}
@Override
public void sayHello(String fruit, int cost) {
System.out.println(fruit + "\t" + cost + "\t" + qty);
}
@Override
public void sayHello(String fruit, int cost, int qty) {
System.out.println(fruit + "\t" + cost + "\t" + qty);
}
}
////////MessageBean.java
package sample01;
public interface MessageBean {
public void sayHello();
public void sayHello(String fruit, int cost);
public void sayHello(String fruit, int cost, int qty);
}
////////HelloSpring.java
package sample01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloSpring {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MessageBean messageBean = (MessageBean) context.getBean("messageBeanImpl");
messageBean.sayHello();
messageBean.sayHello("수박", 15000);
messageBean.sayHello("바나나", 5000, 10);
}
}
////////SpringConfiguration.java
package spring.conf;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import sample01.MessageBeanImpl;
@Configuration
public class SpringConfiguration {
@Bean
//Bean이라고 명시하지 않으면 그냥 일반 자바클래스이다. Spring이 요구하는 값이 아니다.
public MessageBeanImpl messageBeanImpl() { // 메소드명은 반드시 현재클래스의 객체명을 써준다 또는 Bean명
return new MessageBeanImpl("포도");
}
}
////////MessageBeanImpl.java - chapter02_SpringMaven
package sample01;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
@Component
//@ComponentScan("spring.conf")
public class MessageBeanImpl implements MessageBean {
private String fruit;
private int cost, qty;
/*
* public void MessageBeanImpl() { System.out.println("MessageBeanImpl 기본 생성자");
* }
*/
// Constructor Injection
public MessageBeanImpl(@Value("포도") String fruit) {
this.fruit = fruit;
}
// Setter Injection
@Autowired
public void setCost(@Value("12000") int cost) {
this.cost = cost;
}
@Autowired
public void setQty(@Value("5") int qty) {
this.qty = qty;
}
@Override
public void sayHello() {
System.out.println(fruit + "\t" + cost + "\t" + qty);
}
@Override
public void sayHello(String fruit, int cost) {
System.out.println(fruit + "\t" + cost + "\t" + qty);
}
@Override
public void sayHello(String fruit, int cost, int qty) {
System.out.println(fruit + "\t" + cost + "\t" + qty);
}
}
'SPRING' 카테고리의 다른 글
[21.11.11] (sample03 - chapter02_SpringMaven) (0) | 2021.11.11 |
---|---|
[21.11.10] (0) | 2021.11.09 |
[21.11.09] (Chapter02 - sample02) (0) | 2021.11.09 |
[21.11.09] (Chapter02 - sample02 / 03 / 04) (0) | 2021.11.09 |
[21.11.08] (chapter01) (0) | 2021.11.08 |