스프링은 DI(의존주입) , AOP , MVC 지원 , JDBC DB연동의 주요 4가지 특징을 가지는 프레임워크 이다.
DI 의존성주입 : 직접적으로 연관이 없어서 무언가를 통해서 쓸수있다
IOC 제어의역전 : 미리 생성된걸 큰쪽에서 작은걸 꺼내써서 한번에 가져온다
spring bean 객체 생성
bean 태그
class: 객체를 생성하기 위해 사용할 클래스를 지정한다.
id : bean 객체를 가져오기 위해 사용하는 이름을 지정
lazy-init: 싱글톤인 경우 xml을 로딩할 때 객체 생성 여부를 설정한다. true일때 xml로딩 시 객체를 생성하지 않고 객체를 가져 올때 생성한다.
scope : 객체의 범위를 설정한다. singleton 은 객체를 하나만 생성해서 사용한다. property은 객체를 가져 올때 객체를 생성한다.
의존성주입 방법
1. 기본 생성자로 의존성 주입
<bean id="testImpl" class="com.di.test.TestImpl1"/>
TestImpl1 testImpl = new TestImpl1();
2. 오버로딩된 생성자로 의존성 주입
오버로딩된 생성자로 객체 생성 하면서 인수값 2개가 들어간다.
<bean id="testImpl1" class="com.di.test.TestImpl1">
<constructor-arg>
<value type="int>50</value>
</constructor-arg>
<constructor-arg>
<value type="int">70</value>
</constructor-arg>
</bean>
타입이 String이면?
<bean id="tempImpl2" class="com.di.test.TestImpl2">
<constructor-arg>
<value tpye="int">50</value>
</constructor-arg>
<constructor-arg value="유인나"></constructor-arg>
</bean>
생성자 에다가 ref 참조 해라 객체이름은 testImpl1
TestService(Test test) 에 오는것이 new해서 TestImpl1 이 넘어오게 된다.
<bean id="testService" class="com.di.test.TestService">
<constructor-arg>
<ref bean="testImpl2"/>
</constructor-arg>
</bean>
3. 프로퍼티(메소드)로 의존성 주입
메소드를 가지고 의존성 주입을 하려면 TestService에 기본생성자도 만들어줘야 한다.
<bean id="testService" class="com.di.test.TestService">
<property name="test">
<ref bean-"testImpl1"/>
</property>
</bean>
Test test = new TestImpl1();
4. xml 네임스페이스로 의존성 주입 (주로 DB 작업할때)
<bean id="testService" class="com.di.test.TestService"
p:test-ref="testImpl2"/>
5. 어노테이션을 가지고 의존성 주입
package com.di.test;
// applicationContext -> TestService(완충역할) -> TestImpl1 , TestImpl2 접근
/* 다이렉트로 쓰는게 아니라 중간단계 무언가 만들어줘야 한다. */
public class TestService {
private Test test;
// TestService도 객체가 생성되야 TestService생성자도 쓸수있다.
public TestService() {
}
//인터페이스값만 넣어주면 초기화, result 사용가능
//이 기능을 의존성 주입 이라고 한다.
public TestService(Test test) { // 인터페이스가 들어온다.
this.test = test;
}
public String getValue() {
return test.result();
}
}
출력 할곳
ResultMain
xml파일을 객체화 해서 메모리상에 올려야지 읽을 수 있다.
//스프링의 객체로 만들려면 applicationContext.xml 이 필요하다.
// 다이렉트로 접근하지 않고 중간에 완충장치가 서비스라고 얘기한다.
// xml 파일을 읽어드리는 작업을 하는 곳
public class ResultMain {
// 객체화 시킬것이다.
// xml파일을 객체화 하기 -> 메모리상에 올려야지 읽을수 있다.
String path = "com/di/test/applicationContext.xml";
// 내용을 읽어서 객체화 하기
Resourct res = new ClassPathSource(path)
// 이제 내용을 실행해서 xml파일이 객체화 시킨다
BeanFactory factory = new XmlBeanFactory(res);
// test1 과 testService가 만들어졌다.
TestService ob = (TestService)factory.getBean("testService");
System.out.println(ob)
System.out.println(ob.getValue());
// 스프링은 의존성을 줄이기 위해서 중간에 매개체(TestService)를 달아서
TestService를 가지고 간접적 접근을 하게됨
Test ob1 = new TestImpl1(); // 기본생성자 객체생성
System.out.println(ob1.result());
Test ob2 = new TestImpl2();
System.out.println(ob2.result());
위에를 아래로 바꿀수있다.
Test ob;
ob = new TestImpl1();
System.out.println(ob.result());
ob = new TestImpl2();
System.out.println(ob.result());
}
}
'BACKEND > 스프링 Spring' 카테고리의 다른 글
[spring3.0] 의존성주입 DI 어노테이션 GET,POST 방식 (0) | 2022.03.24 |
---|---|
[spring3.0] sts 환경세팅 (0) | 2022.03.24 |
[spring2.5] 게시판 만들기 (0) | 2022.03.23 |
[spring2.5] 스프링 Annotation (0) | 2022.03.23 |
[spring2.5] 스프링 간단한 예제(2) (0) | 2022.03.23 |