>  기사  >  Java  >  Spring에서 사용하는 디자인 패턴은 무엇입니까?

Spring에서 사용하는 디자인 패턴은 무엇입니까?

angryTom
angryTom원래의
2020-02-14 15:06:373379검색

Spring에서 사용하는 디자인 패턴은 무엇입니까?

Spring에서 사용하는 디자인 패턴은 무엇인가요?

1. Simple Factory 패턴

은 Static Factory Method 패턴이라고도 하지만 23가지 GOF 디자인 패턴 중 하나는 아닙니다.

간단한 팩토리 패턴의 핵심은 팩토리 클래스가 수신 매개변수에 따라 어떤 제품 클래스를 생성해야 하는지 동적으로 결정한다는 것입니다.

Spring의 BeanFactory는 간단한 팩토리 패턴을 구현한 것입니다. Bean 객체는 고유 식별자를 전달하여 얻어지지만, 매개변수를 전달한 후에 생성되는지 아니면 매개변수를 전달하기 전에 생성되는지는 특정 상황에 따라 다릅니다. 다음 구성은 HelloItxxz 클래스에 itxxzBean을 생성합니다.

<beans>  
    <bean id="singletonBean" class="com.itxxz.HelloItxxz">
         <constructor-arg>
            <value>Hello! 这是singletonBean</value>  
         </constructor-arg>
    </ bean>
    <bean id="itxxzBean" class="com.itxxz.HelloItxxz"  singleton="false">  
         <constructor-arg>     
             <value>Hello! 这是itxxzBean! </value> 
         </constructor-arg> 
    </bean>
</beans>

추천 학습: Spring이란 무엇인가요?

2. 팩토리 메소드 패턴

일반적으로 애플리케이션에서는 new를 직접 사용하여 객체의 생성과 사용을 분리하기 위해 팩토리 패턴을 채택합니다. 객체의 생성 및 초기화 책임.

일반적으로 애플리케이션에는 Bean을 생성하기 위한 자체 팩토리 객체가 있습니다. 애플리케이션 자체의 팩토리 객체가 관리를 위해 Spring에 넘겨지면 Spring은 일반 Bean이 아닌 Factory Bean을 관리하게 됩니다.

팩토리 메소드의 정적 메소드를 예로 들어보겠습니다.

import java.util.Random;
public class StaticFactoryBean { 
    public static Integer createRandom() { 
        return new Integer(new Random().nextInt());   
    }
}

config.xm 구성 파일을 생성하고 이를 Spring 컨테이너에 포함하여 관리합니다. Factory-method를 통해 정적 메소드 이름을 지정해야 합니다.

<bean id="random"class="example.chapter3.StaticFactoryBean" factory-method="createRandom" scope="prototype"/>

테스트:

public static void main(String[] args) {
    //调用getBean()时,返回随机数.如果没有指定factory-method,会返回StaticFactoryBean的实例,即返回工厂Bean的实例  
    XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));    
    System.out.println("我是IT学习者创建的实例:"+factory.getBean("random").toString());
}

3. 싱글턴 패턴

은 클래스에 인스턴스가 하나만 있는지 확인하고 이에 액세스할 수 있는 전역 액세스 지점을 제공합니다. Spring의 싱글톤 모드는 문장의 후반부를 완성합니다. 즉, 전역 액세스 포인트 BeanFactory를 제공합니다. 그러나 Spring은 임의의 Java 객체를 관리하기 때문에 생성자 수준에서는 싱글톤 제어가 없습니다.

핵심 팁: Spring의 기본 Bean은 모두 싱글톤이며, 싱글톤="true|false" 또는 범위="?"로 지정할 수 있습니다.

4. 어댑터 패턴

Spring의 Aop에서는 프록시 클래스의 기능을 향상시키기 위해 Advice(알림)를 사용합니다. 이 AOP 기능의 Spring 구현 원칙은 클래스의 메소드 레벨 측면을 향상시키기 위해 프록시 모드(1. JDK 동적 프록시. 2. CGLib 바이트코드 생성 기술 프록시.)를 사용하는 것입니다. 프록시 클래스, 프록시 클래스 메소드 앞에 인터셉터를 설정하고 인터셉터의 중요한 내용을 실행하여 프록시 메소드의 기능을 향상시켜 관점 지향 프로그래밍을 구현합니다.

Adapter 클래스 인터페이스: Target

public interface AdvisorAdapter {
    boolean supportsAdvice(Advice advice);  
    MethodInterceptor getInterceptor(Advisor advisor);
}

MethodBeforeAdviceAdapter 클래스,

Adapterclass MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {  
    public boolean supportsAdvice(Advice advice) {       
        return (advice instanceof MethodBeforeAdvice);  
    }  
    public MethodInterceptor getInterceptor(Advisor advisor) {      
        MethodBeforeAdvice advice = (MethodBeforeAdvice) advisor.getAdvice();  
        return new MethodBeforeAdviceInterceptor(advice); 
    }
}

5. 래퍼 패턴

권장 사항: spring Chinese manual

우리 프로젝트에서는 여러 데이터베이스를 연결해야 합니다. 각 고객은 각 방문 동안 필요에 따라 다양한 데이터베이스에 액세스하게 됩니다. 과거에는 항상 Spring 및 Hibernate 프레임워크에서 데이터 소스를 구성했으므로 sessionFactory의 dataSource 속성은 항상 이 데이터 소스를 가리키고 sessionFactory를 사용할 때 모든 DAO가 이 데이터 소스를 통해 데이터베이스에 액세스합니다.

그러나 이제 프로젝트의 요구로 인해 DAO는 sessionFactory에 액세스할 때 여러 데이터 소스 간에 지속적으로 전환해야 합니다. 그러면 sessionFactory가 고객 요구에 따라 데이터 지속성을 수행하도록 만드는 방법이 서로 다른 데이터 간에 동적으로 전환되도록 할 수 있을까요? 출처? 스프링 프레임워크에서 몇 가지 수정만으로 문제를 해결할 수 있나요? 활용할 수 있는 디자인 패턴이 있나요?

우선 Spring의 applicationContext에서 모든 데이터 소스를 구성하는 것을 생각했습니다. 이러한 데이터 소스는 Oracle, SQL Server, MySQL 등 다양한 데이터베이스와 같은 다양한 유형일 수 있습니다. 또는 apache에서 제공하는 org.apache.commons.dbcp.BasicDataSource 또는 org에서 제공하는 org와 같은 다양한 데이터 소스일 수 있습니다. spring.springframework.jndi.JndiObjectFactoryBean 등. 그런 다음 sessionFactory는 데이터 소스 전환 목적을 달성하기 위해 각 고객 요청에 따라 dataSource 속성을 다른 데이터 소스로 설정합니다.

봄에 사용되는 래퍼 패턴은 클래스 이름에 두 가지 표현이 있습니다. 하나는 클래스 이름에 Wrapper가 포함되어 있고 다른 하나는 클래스 이름에 Decorator가 포함되어 있다는 것입니다. 기본적으로 객체에 몇 가지 추가 책임을 동적으로 추가합니다.

6. 프록시 패턴

이 개체에 대한 액세스를 제어하기 위해 다른 개체에 대한 프록시를 제공합니다. 구조적으로 Decorator 패턴과 유사하지만 Proxy는 기능 제한에 가까운 제어 역할을 하는 반면 Decorator는 책임을 늘리는 역할을 합니다. Spring의 프록시 모드는 JdkDynamicAopProxy 및 Cglib2AopProxy와 같은 aop에 반영됩니다.

7. 관찰자 패턴

은 객체 간의 일대다 종속 관계를 정의합니다. 객체의 상태가 변경되면 이에 의존하는 모든 객체가 알림을 받고 자동으로 업데이트됩니다. Spring에서 Observer 패턴에 가장 일반적으로 사용되는 위치는 Listener 구현입니다. ApplicationListener와 같은.

8. 전략 모드

일련의 알고리즘을 정의하고 하나씩 캡슐화하여 상호 교환 가능하게 만듭니다. 이 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있습니다. SimpleInstantiationStrategy의 다음 코드는 전략 모드의 사용을 보여줍니다.

Spring에서 사용하는 디자인 패턴은 무엇입니까?

9. 템플릿 메서드 패턴

은 작업에서 알고리즘의 골격을 정의하는 동시에 일부 단계를 하위 클래스로 연기합니다. 템플릿 방법을 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 특정 단계를 재정의할 수 있습니다.

Template 메소드 패턴은 일반적으로 상속되어야 합니다. 여기서는 템플릿 방법에 대한 또 다른 이해를 탐구하고 싶습니다. Spring에서 JdbcTemplate을 사용할 때 우리는 이 클래스에 메소드가 너무 많기 때문에 이 클래스를 상속하고 싶지 않지만 여전히 JdbcTemplate이 가지고 있는 안정적이고 공개적인 데이터베이스 연결을 사용하고 싶습니다. 변경사항을 추출하여 JdbcTemplate 메소드에 매개변수로 전달할 수 있습니다. 그러나 변경되는 것은 코드 조각이며 이 코드는 JdbcTemplate의 변수를 사용합니다. 무엇을 해야 할까요? 그런 다음 콜백 개체를 사용해 보겠습니다.

(관련 영상 튜토리얼 공유: java 영상 튜토리얼)

이 콜백 객체에서 JdbcTemplate에 변수를 조작하는 메소드를 정의하고 구현해 봅시다. 이 방법은 여기에 변경 사항을 집중시킵니다. 그런 다음 이 콜백 객체를 JdbcTemplate에 전달하여 호출을 완료합니다. 이는 상속 없이 템플릿 메서드를 구현하는 또 다른 방법일 수 있습니다.

다음은 구체적인 예입니다. JdbcTemplate의 실행 메소드

JdbcTemplate이 실행 메소드를 실행

Spring에서 사용하는 디자인 패턴은 무엇입니까?

위 내용은 Spring에서 사용하는 디자인 패턴은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:SpringMVC 워크플로다음 기사:SpringMVC 워크플로