디자인 모델 에 대한 인식 (1)
단순 공장
정적 공장 방법 (Static Factory Method) 모델 이 라 고도 부 르 지만 23 가지 GOF 디자인 모델 중 하나 에 속 하지 않 습 니 다.간단 한 공장 모델 의 실질 은 한 공장 류 가 들 어 오 는 매개 변수 에 따라 어떤 제품 류 를 만들어 야 하 는 지 동태 적 으로 결정 하 는 것 이다.Spring 의 BeanFactory 는 간단 한 공장 모델 의 구현 이다. 유일한 표지 가 들 어 오 면 bean 대상 을 얻 을 수 있 지만, 매개 변 수 를 들 어 온 후에 만 들 었 는 지, 매개 변 수 를 들 어 오기 전에 만 들 었 는 지 는 구체 적 인 상황 에 따라 결정 해 야 한다.다음 설정
<beans>
<bean id="bmwCar" class="cn.ltysyn.factoryMethod.CarStaticFactory" factory-method="getCar">
<constructor-arg value="1">bmwCarconstructor-arg>
bean>
<bean id="audiCar" class="cn.ltysyn.factoryMethod.CarStaticFactory" factory-method="getCar">
<constructor-arg value="2">audiCarconstructor-arg>
bean>
beans>
공장 방법 (공장 방법)
대상 을 만 드 는 데 사용 할 인 터 페 이 스 를 정의 하여 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 합 니 다.Factory Method 는 클래스 의 실례 화 를 하위 클래스 로 지연 시 킵 니 다.Spring 의 Factory Bean 은 전형 적 인 공장 방법 모델 입 니 다.
spring 에서 Bean Factory 와 Factory Bean 의 차이 점
차이 점: BeanFactory 는 Factory, 즉 IOC 용기 나 대상 공장 이 고 Factory Bean 은 Bean 이다.스프링 에 서 는 모든 빈 을 빈 팩 토리 (즉 IOC 용기) 가 관리한다.그러나 Factory Bean 에 게 이 Bean 은 간단 한 Bean 이 아니 라 대상 을 생산 하거나 수식 하여 생 성 할 수 있 는 공장 Bean 입 니 다. 그의 실현 은 디자인 모델 중의 공장 모델 과 수식 기 모델 과 유사 합 니 다. factory Bean 은 beanfactory. getbean 에 해당 합 니 다. 이 돌아 온 bean 은 factory bean 에서 getObject 에서 돌아 온 대상 입 니 다.
획득 에 대하 여
만약 bean 을 testObject 라 고 한다 면 getBean ("testObject") 은 이 bean 을 가 져 오고, getBean ("& testObject") 은 Factory Bean 을 가 져 옵 니 다.
// bean
@Test
public void test2() throws Exception{
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("factory-bean.xml");
DBOperation dBoperation = applicationContext.getBean("proxyDB",DBOperation.class);
MysqlDBEntity dbEntity = new MysqlDBEntity();
dBoperation.save(dbEntity);
}
// factoryBean
@Test
public void test2() throws Exception{
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("factory-bean.xml");
FactoryBean factoryBean = applicationContext.getBean("&proxyDB",FactoryBean.class);
DBOperation db = (DBOperation)factoryBean.getObject();
MysqlDBEntity dbEntity = new MysqlDBEntity();
db.save(dbEntity);
}
BeanFactory 는 Factory 로 끝나 공장 류 (인터페이스) 로 bean 을 생산 하고 관리 하 는 공장 임 을 나타 낸다.Spring 에서 BeanFactory 는 IOC 용기 의 핵심 인터페이스 로 그 직책 은 실례 화, 포 지 셔 닝, 응용 프로그램의 대상 설정 과 이러한 대상 간 의 의존 을 구축 하 는 것 을 포함한다.BeanFactory 는 인터페이스 일 뿐 IOC 용기 의 구체 적 인 실현 은 아니 지만 Spring 용 기 는 Default Listable BeanFactory, XmlBeanFactory, Application Context 등 여러 가지 실현 을 보 여 주 었 다. 그 중에서 XmlBeanFactory 는 자주 사용 하 는 것 으로 XML 방식 으로 응용 대상 과 대상 간 의 의존 관 계 를 묘사 할 것 이다.XmlBeanFactory 류 는 이 XML 설정 메타 데 이 터 를 가지 고 있 으 며, 이 를 통 해 완전히 설정 가능 한 시스템 이나 응용 을 구축 할 것 입 니 다.
BeanFactory 와 ApplicationContext 는 Spring 프레임 워 크 의 두 개의 IOC 용기 로 현재 일반적으로 ApplicationContext 를 사용 하고 있 으 며, BeanFactory 의 역할 을 포함 할 뿐만 아니 라 더 많은 확장 도 진행 하고 있다.
Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml", "applicationContext-part2.xml" });
BeanFactory factory = (BeanFactory) context;
// 接着使用 getBean(String beanName) 方法就可以取得 bean 的实例;
일반적인 상황 에서 Spring 은 반사 체 제 를 통 해
의 class 속성 지정 실현 류 의 사례 화 Bean 을 이용 하고 어떤 상황 에서 사례 화 Bean 과정 이 비교적 복잡 하 며 전통 적 인 방식 에 따라
에서 대량의 배치 정 보 를 제공 해 야 한다.설정 방식 의 유연성 은 제한 을 받는다. 이때 인 코딩 방식 을 사용 하면 간단 한 방안 을 얻 을 수 있다.Spring 은 이 를 위해 org. spring from work. bean. factory. Factory Bean 의 공장 류 인 터 페 이 스 를 제공 합 니 다. 사용 자 는 이 인 터 페 이 스 를 통 해 빈 의 논 리 를 맞 출 수 있 습 니 다.Factory Bean 인 터 페 이 스 는 Spring 프레임 워 크 에 있어 중요 한 위 치 를 차지 하고 Spring 자체 가 70 여 개의 Factory Bean 의 실현 을 제공 합 니 다.그것들 은 복잡 한 Bean 의 세부 사항 을 실례 화하 여 상부 응용 에 편 의 를 가 져 왔 다.Spring 3.0 부터 Factory Bean 은 범용 을 지원 하기 시작 했다. 즉, 인터페이스 성명 을 Factory Bean 의 형식 으로 바 꾸 어 Bean 으로 끝 나 는 것 은 Bean 임 을 나타 낸다. 일반 Bean 과 달리 Factory Bean 인 터 페 이 스 를 실현 한 Bean 이다. 이 Bean 의 ID 에 따라 Bean Factory 에서 얻 은 것 은 실제 Factory Bean 의 getObject () 가 돌아 오 는 대상 이다.Factory Bean 자체 가 아 닌 Factory Bean 대상 을 가 져 오 려 면 id 앞 에 & 기 호 를 추가 하여 가 져 오 십시오.하나의 Bean 이 실현 하려 면 다음 과 같은 세 개의 인 터 페 이 스 를 실현 해 야 한다.
Object getObject():返回由FactoryBean创建的Bean的实例
boolean isSingleton():确定由FactoryBean创建的Bean的作用域是singleton还是prototype;
getObjectType():返回FactoryBean创建的Bean的类型。
한 가지 주의 할 점 이 있 습 니 다. Factory Bean 을 실현 한 클래스 를 Spring 컨 텍스트 에 성공 적 으로 설정 하면 이러한 대상 의 이름 (예 를 들 어 apple Factory Bean) 을 통 해 Spring 의 applicationContext 나 bean Factory 에서 bean 을 가 져 올 때 apple Factory Bean 이 만 든 애플 인 스 턴 스 를 가 져 옵 니 다.Spring 을 통 해 애플 팩 터 리 빈 을 얻 으 려 면 이름 앞 에 & 기 호 를 추가 해 야 합 니 다.
단일 모드 (Singleton)
spring 의 단일 모드 는 후반 구 를 완 성 했 습 니 다. 즉, 전체적인 방문 점 인 Bean Factory 를 제공 합 니 다.그러나 구조 기 단계 에서 단일 예 를 제어 하지 않 았 습 니 다. 이것 은 spring 관리 가 임의의 자바 대상 이기 때 문 입 니 다.핵심 힌트: Spring 에서 기본 bean 은 모두 singleton 으로
FactoryBean
또는 singleton="true|false"
을 통 해 지정 할 수 있 습 니 다.모든 단일 모드 는 정적 방법 으로 만 들 어 졌 기 때문에 단일 대상 은 메모리 에 정적 공유 구역 에 저 장 됩 니 다.
게으름뱅이 식 과 굶 주 린 사람 식
게으름뱅이
// 懒汉,线程不安全
public class SingletonDemo1 {
private static SingletonDemo1 instance;
private SingletonDemo1() {}
public static SingletonDemo1 getInstance() {
if (instance == null) {
instance = new SingletonDemo1();
}
return instance;
}
}
// 线程安全
public class SingletonDemo2 {
private static SingletonDemo2 instance;
private SingletonDemo2() {}
public static synchronized SingletonDemo2 getInstance() {
if (instance == null) {
instance = new SingletonDemo2();
}
return instance;
}
}
굶 주 린 한식 일례 모델
/**
* 基于classloder机制避免了多线程的同步问题
* instance 在类装载时就实例化,这时候初始化 instance 显然没有达到 lazy loading 的效果
*/
public class SingletonDemo3 {
private static SingletonDemo3 instance = new SingletonDemo3();
private SingletonDemo3() {}
public static SingletonDemo3 getInstance() {
return instance;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.