Spring_참고폴더
Spring STS3 설정
https://adoptium.net/temurin/releases/
// JAVA_HOME 과 겹치는 것 방
추가 후 STS.exe 실행
# Framework
- 프레임워크는 작업의 구조가 정해져 있는 라이브러리이다
- 앱, 서버 등의 구동, 메모리 관리 등의 공통 부분은 프레임워크가 관리하며,
- 개발자는 서비스별로 다른 부분만 프레임워크가 정해준 방식대로
- 클래스, 메서드 등을 구현
# Spring Framework
- 스프링 프렝미워크는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크이다
# Spring Framework 특징
1. 제어반전( IoC : Inversion of Control )
- 스프링에서 설정한 내용을 기반으로 애플리케이션 필요 요소들을 호출
2. 의존성 주입 ( DI : Dependency Injection )
- 상호 연결이 필요한 객체들을 스프링 설정에서 연결, 주입하도록 설정
3. 관점 지향 프로그래밍 ( AOP : Aspect Oriented Programming )
- 트랜잭션, 보안 등 여러 모듈에서 공톡저긍로 지원하는 기능을 분리하여 사용 가능
4. POJO ( Plain Old Java Object )
- 자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하며,
스프이 컨테이너로부터 필요한 객체들을 얻어 올 수 있다
package com.combi.ex01;
public class MessageBeanKr {
public void sayHello() {
System.out.println("스프링 시작...");
}
}
package com.combi.ex01;
public class MessageBeanEn {
public void sayHello() {
System.out.println("spring start...");
}
}
package com.combi.ex01;
public class SpringStart {
public static void main(String[] args) {
// 기본적인 자바 형식
MessageBeanKr beanA = new MessageBeanKr();
beanA.sayHello();
MessageBeanEn beanB = new MessageBeanEn();
beanB.sayHello();
}
}
스프링 시작...
spring start...
package com.combi.ex02;
public interface MessageBean {
public void sayHello();
}
package com.combi.ex02;
public class MessageBeanKr implements MessageBean{
public void sayHello() {
System.out.println("안녕 스프링...");
}
}
package com.combi.ex02;
public class MessageBeanEn implements MessageBean{
public void sayHello() {
System.out.println("Hi Spring...");
}
}
package com.combi.ex02;
public class PolyMain {
public static void main(String[] args) {
MessageBean bean = null;
bean = new MessageBeanKr();
bean.sayHello();
bean = new MessageBeanEn();
bean.sayHello();
}
}
안녕 스프링...
Hi Spring...
package com.combi.ex03;
public interface MessageBean {
public void sayHello();
}
package com.combi.ex03;
public class MessageBeanKr implements MessageBean{
public void sayHello() {
System.out.println("안녕 스프링...");
}
}
package com.combi.ex03;
public class MessageBeanEn implements MessageBean{
public void sayHello() {
System.out.println("Hi Spring...");
}
}
package com.combi.ex03;
/*
* # Factory 패턴
* - 객체를 생서아는 디자인 패턴 중 하나
* 객체 생성을 클라이언트로 부터 분리시켜서 객체 생성을 처리하는 팩토리 객체를 이용하여
* 객체를 생성
*/
public class BeanFactory {
public MessageBean getBean(String beanName) {
if(beanName.equals("kr")) {
return new MessageBeanKr();
} else if(beanName.equals("en")) {
return new MessageBeanEn();
} else return null;
}
}
package com.combi.ex03;
public class FactoryMain {
public static void main(String[] args) {
BeanFactory factory = new BeanFactory();
MessageBean bean = null;
bean = factory.getBean("kr");
bean.sayHello();
System.out.println();
bean = factory.getBean("en");
bean.sayHello();
}
}
안녕 스프링...
Hi Spring...
package com.combi.ex04;
public interface MessageBean {
public void sayHello();
}
package com.combi.ex04;
public class MessageBeanKr implements MessageBean{
public void sayHello() {
System.out.println("안녕 스프링...");
}
}
package com.combi.ex04;
public class MessageBeanEn implements MessageBean{
public void sayHello() {
System.out.println("Hi Spring...");
}
}
<?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.xml -->
<!--
# .xml 파일
- Spring 구성 파일로 사용됨
application 의 컨텍스트를 구성, 빈(bean)을 정의,
빈 간의 의존성 설정
# bean 설정
- xml 파일 생성 : package 우클릭 -> Spring Bean Configuration File -> 에서 생성
- 해당 bean 을 애플리케이션에서 사용할 수 있음
-->
<bean id="messageBeanKr" class="com.combi.ex04.MessageBeanKr"></bean>
<bean id="messageBeanEn" class="com.combi.ex04.MessageBeanEn"></bean>
</beans>
package com.combi.ex04;
import org.springframework.context.support.GenericXmlApplicationContext;
public class XMLMain {
public static void main(String[] args) {
// # GenericXmlApplicationContext class
// - ApplicationContext 인터페이스를 구현한 class
// XML 기반의 설정 정보를 사용하여 ApplicationContext 를 생성하는 역할
// - bean.xml 에 정의한 <bean> 설정 정보를 읽어와서
// 내부적으로 MessageBean 객체를 생성하고 초기화 한다
GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/combi/ex04/bean.xml");
MessageBean bean = (MessageBean)context.getBean("messageBeanKr");
bean.sayHello();
System.out.println();
MessageBean bean2 = (MessageBean)context.getBean("messageBeanEn");
bean2.sayHello();
context.close();
}
}
안녕 스프링...
Hi Spring...
# DI ( Dependency Injection : 의존성 주입 )
- 객체간의 결합을 느슨하게 하는 스프링 기술
- 객체 사이의 의존관계를 자기 자신이 아닌 외부에 의해서 설정하는 방식
# DI 방식( 의존 관계 관리 )
- 생성자 방식( Construction Injection )
> 생성자를 통해서 의존관계를 연결시키는 것
- 메서드 방식( Setter Injection )
> 'property' 태그의 name 속성을 사용해서 어떤 의존 관계가 주입되는지 알 수 있다.
package com.di.ex01;
public interface MessageBean {
public void sayHello();
public void sayHello(String a, int b);
}
package com.di.ex01;
public class MessageBeanImpl implements MessageBean{
private String fruit;
private int cost;
public MessageBeanImpl() {}
public MessageBeanImpl(String fruit) {
super();
this.fruit = fruit;
System.out.println("- MessageBeanImpl(String) - ");
}
public void setFruit(String fruit) {
this.fruit = fruit;
System.out.println("- setFruit() -");
}
public void setCost(int cost) {
this.cost = cost;
System.out.println("- setCost() -");
}
@Override
public void sayHello() {
System.out.println(fruit + "\t" + cost);
}
@Override
public void sayHello(String a, int b) {
System.out.println(a + "\t" + b);
}
}
<?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="messageBean" class="com.di.ex01.MessageBeanImpl">
<!-- 생성자 -->
<constructor-arg>
<value>banana</value>
</constructor-arg>
<!-- Setter -->
<property name="cost" value="3000"></property>
</bean>
</beans>
package com.di.ex01;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex01/bean.xml");
MessageBean bean = (MessageBean)context.getBean("messageBean");
bean.sayHello();
bean.sayHello("사과", 2000);
context.close();
}
}
- MessageBeanImpl(String) -
- setCost() -
banana 3000
사과 2000
package com.di.ex02;
public interface InterFoo {
}
package com.di.ex02;
public class Foo implements InterFoo{
public Foo() {
System.out.println("this : " + this);
System.out.println("- Foo() -");
}
public Foo(String stn) {
System.out.println("this : " + this);
System.out.println("stn : " + stn);
System.out.println("- Foo(String) -");
}
public Foo(int num, String stn) {
System.out.println("this : " + this);
System.out.println("num : " + num);
System.out.println("stn : " + stn);
System.out.println("- Foo(num, String) -");
}
public Foo(int num, String stn, boolean flag) {
System.out.println("this : " + this);
System.out.println("num : " + num);
System.out.println("stn : " + stn);
System.out.println("flag : " + flag);
System.out.println("- Foo(num, String, boolean) -");
}
public Foo(Bar bar) {
System.out.println("this : " + this);
System.out.println("- Foo(Bar) -");
System.out.println("bar : " + bar);
}
}
package com.di.ex02;
public class Bar {
public Bar() {
System.out.println("- Bar() - ");
}
}
<?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">
<!-- applicationContext.xml -->
<!-- Bar bar = new Bar(); -->
<bean id="bar" class="com.di.ex02.Bar"></bean>
<!-- Foo fooA = new Foo(); --> <!-- default 생성자를 생성해야 나머지 생성자들도 가능 -->
<bean id="fooA" class="com.di.ex02.Foo"></bean>
<!-- Foo fooB = new Foo(String); -->
<bean id="fooB" class="com.di.ex02.Foo">
<constructor-arg value="fooB"></constructor-arg>
</bean>
<!-- Foo fooC = new Foo(int, String); -->
<bean id="fooC" class="com.di.ex02.Foo">
<constructor-arg index="0">
<value>1</value>
</constructor-arg>
<constructor-arg index="1" value="fooC"></constructor-arg>
</bean>
<!-- Foo fooD = new Foo(int, String, boolean); -->
<bean id="fooD" class="com.di.ex02.Foo">
<constructor-arg value="2"/>
<constructor-arg value="fooD"/>
<constructor-arg value="true"/>
</bean>
<!-- Foo fooE = new Foo(Bar); -->
<bean id="fooE" class="com.di.ex02.Foo">
<constructor-arg>
<ref bean="bar"/>
</constructor-arg>
</bean>
</beans>
package com.di.ex02;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex02/applicationContext.xml");
context.close();
}
}
- Bar() -
this : com.di.ex02.Foo@10959ece
- Foo() -
this : com.di.ex02.Foo@1da2cb77
stn : fooB
- Foo(String) -
this : com.di.ex02.Foo@a530d0a
num : 1
stn : fooC
- Foo(num, String) -
this : com.di.ex02.Foo@6cd28fa7
num : 2
stn : fooD
flag : true
- Foo(num, String, boolean) -
this : com.di.ex02.Foo@1e04fa0a
- Foo(Bar) -
bar : com.di.ex02.Bar@1af2d44a
package com.di.ex03;
public class UserVO {
private String userName;
public UserVO() {
}
public UserVO(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
package com.di.ex03;
public interface UserService {
public void add(UserVO vo);
}
package com.di.ex03;
public class UserServiceImpl implements UserService{
public UserServiceImpl() {}
@Override
public void add(UserVO vo) {
System.out.println("- add(UserVO vo) -");
System.out.println("이름 : " + vo.getUserName());
}
}
<?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">
<!-- applicationContext.xml -->
<bean id="userService" class="com.di.ex03.UserServiceImpl"></bean>
</beans>
package com.di.ex03;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex03/applicationContext.xml");
UserVO manA = new UserVO("userA");
UserService userA = (UserService)context.getBean("userService");
userA.add(manA);
System.out.println();
UserService userB = context.getBean("userService", UserService.class);
System.out.println("userB : " + userB);
context.close();
}
}
- add(UserVO vo) -
이름 : userA
userB : com.di.ex03.UserServiceImpl@4de4b452