Spring 리뷰 노트 (1) Spring 프레임 워크 개요 및 기본 사용법

봄 개요

봄이란

Spring은 IoC (Inverse Of Control) 및 AOP (Aspect Oriented Programming)를 핵심으로 하는 계층화 된 Java SE / EE 애플리케이션 풀 스택 경량 오픈 소스 프레임 워크 입니다.

프레젠테이션 계층 SpringMVC, 지속성 계층 Spring JDBCTemplate, 비즈니스 계층 트랜잭션 관리와 같은 많은 엔터프라이즈 급 애플리케이션 기술을 제공합니다. 또한 오픈 소스 세계에서 잘 알려진 많은 타사 프레임 워크 및 클래스 라이브러리를 통합 할 수 있습니다. 가장 많이 사용되는 Java EE 엔터프라이즈 애플리케이션 오픈 소스 프레임 워크

봄의 역사

1997 년 IBM은 EJB의 아이디어를 내놓았습니다.
1998 년 SUN은 표준 사양 EJB1.0을 제정하고 개발했습니다.
1999 년에는 EJB1.1이
2001 년에 출시되었고 EJB2.0은
2003 년 에 출시되었으며 EJB2.1은 출시
2006 년과 EJB3.0이 방출 됐습니다.

Rod Johnson (Spring의 아버지)
Expert One-to-One J2EE Design and Development (2002)
는 EJB 개발 및 디자인을 사용하는 J2EE의 장점과 솔루션을 설명했습니다.
Expert One-to-One J2EE Development without EJB (2004)
는 J2EE 개발에 대해 설명했습니다. EJB (Spring 프로토 타입)를 사용한 솔루션

2017 년 9 월에 Spring Spring 5.0
General Edition (GA) 의 최신 버전이 출시되었습니다.

Spring의 장점

1) 편리한 디커플링 및 단순화 된 개발
Spring에서 제공하는 IoC 컨테이너를 통해 객체 간의 종속성을 Spring에 의해 제어하여 하드 코딩으로 인한 오버 커플 링을 방지 할 수 있습니다.
사용자는 더 이상 싱글 톤 패턴 클래스 및 속성 파일 분석과 같은 하위 수준 요구 사항에 대한 코드를 작성할 필요가 없으며 상위 수준 응용 프로그램에 더 집중할 수 있습니다.
2) AOP 프로그래밍 지원
Spring의 AOP 기능을 통해 aspect 지향 프로그래밍에 편리하며 기존 OOP로 구현하기 쉽지 않은 많은 기능을 AOP로 쉽게 구현할 수있다.
3) 선언적 트랜잭션 지원은
단조롭고 지루한 트랜잭션 관리 코드에서 해방되고 선언적 방식으로 트랜잭션을 유연하게 관리하여 개발 효율성과 품질을 향상시킬 수 있습니다.
4) 편리한 프로그램 테스트
거의 모든 테스트 작업은 컨테이너에 의존하지 않는 프로그래밍 방법으로 수행 할 수 있습니다. 테스트는 더 이상 비용이 많이 드는 작업이 아니라 바로 수행 할 수있는 작업입니다.
5) 다양한 우수한 프레임 워크의 편리한 통합
Spring은 다양한 우수한 프레임 워크 (Struts, Hibernate, Hessian, Quartz 등)를 지원합니다.
6) JavaEE API 사용의 어려움 감소
Spring은 JavaEE API (JDBC, JavaMail, 원격 호출 등)를위한 얇은 캡슐화 계층을 가지고있어 이러한 API 사용의 어려움을 크게 줄입니다.
7) 자바 소스 코드는 고전적인 학습 예제이며
Spring의 소스 코드 디자인은 정교하고 구조가 명확하며 독창적 인 독창성이며 마스터의 Java 디자인 패턴 및 고급 Java 기술을 유연하게 사용합니다. 소스 코드는 Java 기술에 대한 모범 사례의 예가 아닙니다.

Spring 개발 아키텍처여기에 사진 설명 삽입

위의 테스트는 모든 모듈이 테스트를 기반으로해야하는 것이 아니라 모든 스프링 모듈을 테스트 할 수 있음을 의미합니다.

봄 프로그램 개발 단계

여기에 사진 설명 삽입

  1. 스프링 종속성 좌표 가져 오기
  2. Dao 인터페이스 및 구현 클래스 작성
  3. Spring 코어 구성 파일 생성
  4. Spring 구성 파일에서 UserDaoImpl 구성
  5. Spring의 API를 사용하여 Bean 인스턴스 얻기
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입

스프링 구성 파일

빈 태그 기본 구성

범위 : 개체의 범위를 나타내며 값은 다음과 같습니다.
여기에 사진 설명 삽입

Bean을 인스턴스화하는 세 가지 방법

매개 변수없는 생성자를 사용하여 초기화
<bean id="userDao" class="com.feitian.spring.dao.impl.UserDaoImpl"
          init-method="initMethod" destroy-method="destroyMethod" scope="singleton">
</bean>
정적 팩토리 사용
<bean id="userDao" class="com.feitian.spring.factory.StaticFactory"
          factory-method="getUserDao">
</bean>
다이나믹 팩토리 사용
<bean id="factory" class="com.feitian.spring.factory.DynamicFactory"></bean>
    <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>

콩의 의존성 주입

종속성 주입 : Spring 프레임 워크의 핵심 IOC를 구체적으로 구현 한 것입니다. 프로그램을 작성할 때 제어 반전을 통해 객체 생성은 Spring에 넘겨 지지만 코드에 종속성이없는 것은 불가능합니다. IOC 디커플링은 종속성을 감소시킬뿐 제거하지는 않습니다. 예를 들어 비즈니스 계층은 여전히 ​​지속성 계층의 메서드를 호출합니다. Spring을 사용한 후 비즈니스 계층과 지속성 계층 간의 종속성은 Spring에 의해 유지됩니다. 간단히 말해, 프레임 워크가 지속성 계층 개체를 직접 가져 오는 대신 비즈니스 계층으로 전달하기를 기다리는 것입니다.
① 공법 설정

public class UserServiceImpl implements UserService {
    
    
    public UserServiceImpl() {
    
    
    }
     public UserServiceImpl(UserDao userDao) {
    
    
        this.userDao = userDao;
    }
@Override
	public void save() {
    
    
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");       UserDao userDao =(UserDao)applicationContext.getBean("userDao");    
       	userDao.save();
    }
 }

applicationContext 구성 파일

<bean id="factory" class="com.feitian.spring.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
<bean id="userService" class="com.feitian.spring.Service.Impl.UserServiceImpl">
    <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>

오류가있는 경우 생성자를 사용자 정의해야합니다.

② 메소드 설정
UserServiceImpl에 setUserDao 메소드 추가

public class UserServiceImpl implements UserService {
    
    
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
    
    
        this.userDao = userDao;
    }
    public void save() {
    
    
        ApplicationContext appContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        UserDao userDao = (UserDao) appContext.getBean("userDao");
        userDao.save();
    }
}

applicationContext 구성 파일

<bean id="factory" class="com.feitian.spring.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
<bean id="userService" class="com.feitian.spring.Service.Impl.UserServiceImpl">
    <property name="userDao" ref="userDao"></property>
</bean>

p 네임 스페이스 주입

설정에 속성을 사용하지 않으려면 네임 스페이스 형식을 사용할 수 있습니다.
구성 파일의 맨 위에 p 네임 스페이스를 소개합니다.

xmlns:p="http://www.springframework.org/schema/p"

빈 구성 수정

<bean id="userDao" class="com.feitian.spring.dao.impl.UserDaoImpl" ></bean>
<bean id="userService" class="com.feitian.spring.Service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>

다양한 종류의 콩 봄 주입

다양한 기본 유형 값과 참조 유형 값을 주입하는 것과 같은 주입 예는 다음과 같습니다.
주입 할 클래스 :

public class UserServiceImpl implements UserService {
    
    
    private String username;
    private int age;
    private List<String> course;
    private Map<String, User> userMap;
    private UserDao userDao;
    private Properties properties;

    public UserDao getUserDao() {
    
    
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
    
    
        this.userDao = userDao;
    }

    public Properties getProperties() {
    
    
        return properties;
    }

    public void setProperties(Properties properties) {
    
    
        this.properties = properties;
    }

    public Map<String, User> getUserMap() {
    
    
        return userMap;
    }

    public void setUserMap(Map<String, User> userMap) {
    
    
        this.userMap = userMap;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    public List<String> getCourse() {
    
    
        return course;
    }

    public void setCourse(List<String> course) {
    
    
        this.course = course;
    }

    public void save() {
    
    
        System.out.println("my name is:"+username);
        System.out.println("my age is"+age);
        System.out.println("my course lists is :"+course);
        System.out.println("my favourite teachers is :"+userMap);
        System.out.println("my hobby is "+properties);
        userDao.save();
    }
}

applicationContext 구성 파일 설정

    <bean id="userDao" class="com.feitian.spring.dao.impl.UserDaoImpl" ></bean>
    <bean id="userService" class="com.feitian.spring.Service.impl.UserServiceImpl" p:userDao-ref="userDao">
        <property name="course">
            <list>
                <value>math</value>
                <value>english</value>
                <value>physical</value>
                <value>computer</value>
            </list>
        </property>
        <property name="age" value="2"></property>
        <property name="username" value="tom"></property>
        <property name="userMap">
            <map >
                <entry key="math" value-ref="mathTeacher"></entry>
                <entry key="computer" value-ref="computerTeacher"></entry>
            </map>
        </property>
        <property name="properties" >
            <props>
                <prop key="hobby1">swimming</prop>
                <prop key="hobby2">basketball</prop>
            </props>
        </property>
     </bean>

    <bean id="mathTeacher" class="com.feitian.spring.domain.User">
        <property name="username" value="tom"></property>
        <property name="age" value="32"></property>
        <property name="password" value="tompp"></property>
     </bean>
    <bean id="computerTeacher" class="com.feitian.spring.domain.User">
        <property name="username" value="jack"></property>
        <property name="age" value="45"></property>
        <property name="password" value="jackpp"></property>
    </bean>

Spring 구성 파일 모듈화

여기에 사진 설명 삽입

 <import resource="applicationContext_goods.xml"></import>
 <import resource="applicationContext_user.xml"></import>

Spring은 외부 구성 파일을로드하려고합니다.

Spring이 외부 구성 파일을 읽어야 할 때 외부 파일을로드하기 위해 컨텍스트 네임 스페이스에 매핑 될 수 있습니다.
먼저 xml 헤더 파일을 변경하고 컨텍스트 네임 스페이스를 추가합니다.

<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.xsd">

그런 다음 해당 외부 파일을 추가하십시오.

<context:property-placeholder location="classpath:c3p0.properties"></context:property-placeholder>
<context:property-placeholder location="classpath:druid.properties"></context:property-placeholder>

위의 단계 후에 스프링은 외부 관련 구성 파일을로드합니다.

추천

출처blog.csdn.net/xueshanfeitian/article/details/109498272