2016-09-12 2 views
0

저는 봄에 익숙하지 않고 새로운 연산자로 클래스를 인스턴스화 할시기와 스프링 컨테이너를 사용할 때를 이해할 수 없습니다. 예는 내가 코드IOC 컨테이너 주입 이해하기

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
public class Test { 

public static void main(String[] args) { 
    ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); 

    EmployeeDao dao=(EmployeeDao)ctx.getBean("edao"); 
    int status=dao.saveEmployee(new Employee(102,"Amit",35000)); 
    System.out.println(status); 

    int status=dao.updateEmployee(new Employee(102,"Sonoo",15000)); 
    System.out.println(status); 


    Employee e=new Employee(); 
    e.setId(102); 
    int status=dao.deleteEmployee(e); 
    System.out.println(status); 

} 

} 

내가 JDBC 템플릿을 사용하고 발견했다. 나는 우리가 직원 클래스를 새로 도입해야하는 이유가 무엇인지 의심 스럽다. 대신에 (Employee) ctx.getBean ("employee")을 사용해야했다. 새 연산자를 사용하면 종속성이 생깁니 까? Pls는 우리가 구축 한 응용 프로그램의

"

봄, 지속적으로 Spring에 의해 관리 도메인 객체되지 않은 유일한 객체를 사용

ProSpring 책에서
+0

도메인 클래스는 new 연산자로 인스턴스화해야합니다. 그리고 Spring이 사용자가 Bean으로 정의한 객체를 생성하도록 할 수 있습니다. '(Employee) ctx.getBean ("employee")'는'applicationContext.xml'에 정의 된 bean이있는 경우에만 할 수 있습니다. –

답변

0

를, 도움이됩니다. (봄 에가 가능하더라도 Spring이 @Component 어노테이션을 클래스 에 적용하고 프로토 타입 범위를 지정하여 도메인 객체를 관리하게한다. 대부분 애플리케이션의 도메인 객체를 관리하기로 선택할 것이다.) 그 이유는 실질적으로 Spring이 도메인 개체와 관련 될 필요는 없습니다. 일반적으로 do new() 연산자 을 사용하여 서비스 또는 데이터 액세스 계층에서 처리를 수행합니다. Spring은 빈 범위 프로토 타입을 사용하여 요청할 때마다 도메인 객체의 새로운 인스턴스를 삽입 할 수 있지만 일반적으로 개발자는이 방법을 채택하지 않습니다. 일반적으로 도메인 객체는 종속성 삽입의 이점을 취하지 않기 때문입니다. 일반적으로 DOM 외부의 종속성은 거의 없으며 많은 구성이 필요하지 않습니다. "

그렇다면 Employee 유형의 bean을 작성할 수는 있지만 모든 bean을 기본값으로 프로토 타입으로 정의해야합니다 봄에는 싱글 톤입니다. 많은 직원과 그 객체가있을 수 있기 때문에 분명히 Employee를 싱글 톤으로 가질 수는 없지만 스프링 기능의 활용에 대한 집중은 도메인 ob jects.

+0

고맙습니다. @ user3138997 –

0

스프링 IOC 컨테이너는 스프링 프레임 워크의 핵심 부분입니다. 컨테이너는 객체를 생성하고, 와이어 링하고, 구성하고, 생성에서 파기까지 전체 라이프 사이클을 관리합니다. IoC 컨테이너는 XML 또는 Java 주석 또는 Java 코드를 통해 정보/메타 데이터를 가져옵니다.

그래, 당신이 당신의 봄 컨텍스트 XML 파일에 직원 콩을 작성하고 있는지 범위를 만들 수있는 것은

<bean id="employee" class="com.mycompany.Employee" scope="prototype"/> 

로 프로토 타입입니다 그래서 직원 콩의 모든 요청에, 당신은 새로운 객체 직원을 얻을 것이다.

  • 싱글의 다른 범위가 있습니다 : 이것은 Spring IoC 컨테이너 (기본값) 당 하나의 인스턴스에 빈 정의를 스코프.
  • 요청 : 모든 HTTP 요청에서 새 빈이 만들어 전달됩니다.
  • 프로토 타입 : 모든 요청 (api 요청)마다 새 빈이 생성됩니다.
  • 세션 :이 범위는 HTTP 세션에 대한 Bean 정의입니다.

참고 : 데이터베이스 모델 클래스의 Bean을 작성하는 것은 권장되지 않습니다. 영구 계층이 처리하므로주의해야합니다.