Springframework(스프링) p & c schema 사용하기
2018. 7. 10. 20:13ㆍWeb/Spring
스프링프레임워크 p & c schema
servlet context & servlet xml 설정파일에서 <property>,<constructor-arg> 로 속성을 정의하지 않고 간결한 표현을 제공하는 것이 p와 c schema이다.
말로 설명하는 것보다는 간단한 예제를 통해서 보는 것이 이해가 빠르다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | package sample.spring.chapter03.beans; import java.util.Currency; import java.util.Date; public class BankDetails { private String bankName; private byte[] bankPrimaryBusiness; private char[] headOfficeAddress; private char privateBank; private Currency primaryCurrency; private Date dateOfInception; private Address branchAddresses; public String getBankName() { return bankName; } public void setBankName(String bankName) { this.bankName = bankName; } public byte[] getBankPrimaryBusiness() { return bankPrimaryBusiness; } public void setBankPrimaryBusiness(byte[] bankPrimaryBusiness) { this.bankPrimaryBusiness = bankPrimaryBusiness; } public char[] getHeadOfficeAddress() { return headOfficeAddress; } public void setHeadOfficeAddress(char[] headOfficeAddress) { this.headOfficeAddress = headOfficeAddress; } public Currency getPrimaryCurrency() { return primaryCurrency; } public void setPrimaryCurrency(Currency primaryCurrency) { this.primaryCurrency = primaryCurrency; } public Date getDateOfInception() { return dateOfInception; } public void setDateOfInception(Date dateOfInception) { this.dateOfInception = dateOfInception; } public char getPrivateBank() { return privateBank; } public void setPrivateBank(char privateBank) { this.privateBank = privateBank; } public Address getBranchAddresses() { return branchAddresses; } public void setBranchAddresses(Address branchAddresses) { this.branchAddresses = branchAddresses; } @Override public String toString() { return "BankDetails [bankName=" + bankName + ", bankPrimaryBusiness=" + new String(bankPrimaryBusiness) + ", headOfficeAddress=" + new String(headOfficeAddress) + ", primaryCurrency=" + primaryCurrency + ", dateOfInception=" + dateOfInception + ", privateBank=" + privateBank + ", branchAddresses=" + branchAddresses + "]"; } } | cs |
setter를 이용해 빈주입을 하는 예제이다. xml 파일에서는 원래라면 <property> tag를 이용하여 빈의 속성을 주입해줄 것이다.
하지만 p schema를 이용하면 훨씬 간결한 표현이 된다.
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <bean id="bankDetails" class="sample.spring.chapter03.beans.BankDetails" p:bankName="My Personal Bank" p:bankPrimaryBusiness="Retail banking" p:headOfficeAddress="Address of head office" p:privateBank="Y" p:primaryCurrency="INR" p:dateOfInception="30-01-2012" p:branchAddresses-ref="branchAddresses" /> </beans> | cs |
여기서 p schema를 사용하기 위해 네임스페이스를 추가해주는 설정이 필요하다. 단순 값은 p:bankName="value" 형태이고, 다른 빈을 참조할 경우는
p:branchAddress-ref="빈id"이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package sample.spring.chapter03.beans; import java.beans.ConstructorProperties; import java.util.Date; public class BankStatement { private Date transactionDate; private double amount; private String transactionType; private String referenceNumber; @ConstructorProperties({ "transactionDate", "amount", "transactionType", "referenceNumber" }) public BankStatement(Date transactionDate, double amount, String transactionType, String referenceNumber) { this.transactionDate = transactionDate; this.amount = amount; this.transactionType = transactionType; this.referenceNumber = referenceNumber; } @Override public String toString() { return "BankStatement [transactionDate=" + transactionDate + ", amount=" + amount + ", transactionType=" + transactionType + ", referenceNumber=" + referenceNumber + "]"; } } | cs |
생성자로써 의존주입을 할때 예시이다.
1 2 3 4 5 6 7 8 9 10 11 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <bean id="bankStatement" class="sample.spring.chapter03.beans.BankStatement" c:transactionDate="30-01-2012" c:amount="1000" c:transactionType="Credit" c:referenceNumber="1110202" /> </beans> | cs |
p schema와 방법은 차이가 없다. 하지만 여기서는 constructor 매개변수들의 이름을 지정하였다.(@ConstructorProperties 어노테이션을 이용하여 디버그플러그를 비활성화 시켰을 때, 생성자의 매개변수 이름을 지정하여 참조할 수 있게 설정하였다.) 하지만 index로 참조하려고 할 경우도 있을 것이다. 그럴경우에는 c:_0-ref="bean id" 이런 식으로 작성하면 된다. _를 포함하는 인덱스넘버를 넣어줘야함에 유의하면 된다.
'Web > Spring' 카테고리의 다른 글
Springframework <bean> depends-on 속성 (0) | 2018.07.28 |
---|---|
Springframework(스프링) util schema 사용하기 (0) | 2018.07.10 |
Springframework(스프링) 빈 정의 상속 (0) | 2018.07.09 |
Spring 정적 리소스 자원 매핑 (0) | 2018.06.16 |
Spring - EmbeddedDatabase(스프링 내장형DB) (0) | 2018.06.16 |