[SPRING] 스프링 주석을 사용하여 맵에 값 삽입
SPRING스프링 주석을 사용하여 맵에 값 삽입
나는 봄을 사용하고있다. 대부분 구성 요소와 서비스를 주입 할 것입니다. 하지만 이제 enum 키와 함께 "캐시"구현의 값을 주입 한지도를 초기화하여 주어진 캐시를 새로 고치는 객체를 얻을 수 있도록 열거 형을 지정하고 싶습니다.
Map<String,Cache>
Key Value
"category" @Inject Category
"attr" @Inject Attr
"country" @Inject Country
내 수업은 좋아.
public abstract class Cache{
refreshCache() {
clearCache();
createCache();
}
clearCache();
createCache();
}
@Component
@Scope("singleton")
@Qualifier("category")
class Category extends Cache{}
@Component
@Scope("singleton")
@Qualifier("attr")
class Attr extends Cache{}
@Component
@Scope("singleton")
@Qualifier("country")
class Country extends Cache{}
그것은 XML (벨로우즈 또는 링크처럼)로 할 수 있지만 주석으로 처리하고 싶습니다.
<property name="maps">
<map>
<entry key="Key 1" value="1" />
<entry key="Key 2" value-ref="PersonBean" />
<entry key="Key 3">
<bean class="com.mkyong.common.Person">
<property name="name" value="mkyongMap" />
<property name="address" value="address" />
<property name="age" value="28" />
</bean>
</entry>
</map>
</property>
해결법
-
==============================
1.Spring 컨텍스트에 다음과 같은 bean이 있다면 :
Spring 컨텍스트에 다음과 같은 bean이 있다면 :
@Component("category") class Category extends Cache { } @Component("attr") class Attr extends Cache { } @Component("country") class Country extends Cache { }
싱글 톤으로 스코프를 명시 적으로 설정할 필요가 없다는 것을 명심하십시오. 이것이 스프링의 기본값이기 때문입니다. 게다가 @Qualifier를 사용할 필요가 없습니다. @Component ( "beanName")를 통해 bean 이름을 설정하면 충분합니다.
싱글 톤 빈 인스턴스를 맵에 삽입하는 가장 간단한 방법은 다음과 같습니다.
@Autowired Map<String, Cache> map;
이렇게하면 캐시의 모든 하위 클래스가 맵에 효과적으로 자동으로 연결되며 키는 빈 이름이됩니다.
-
==============================
2.Spring Expression Language를 사용하여이를 수행 할 수 있습니다.
Spring Expression Language를 사용하여이를 수행 할 수 있습니다.
아래지도 정의가 변형되었습니다.
<property name="maps"> <map> <entry key="Key 1" value="1" /> <entry key="Key 2" value-ref="PersonBean" /> <entry key="Key 3"> <bean class="com.mkyong.common.Person"> <property name="name" value="mkyongMap" /> <property name="address" value="address" /> <property name="age" value="28" /> </bean> </entry> </map> </property>
주석 기반. 아래는 코드입니다.
@Component("PersonBean") public class PersonBean { public String getMessage() { return "hello!"; } }
package com.mkyong.common; public class Person { private String name; private String address; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.mkyong.common.Person; @Configuration public class PersonConfiguration { @Bean public Person person() { Person person = new Person(); person.setName("mkyongMap"); person.setAddress("address"); person.setAge(28); return person; } }
import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.mkyong.common.Person; @Controller public class TestController { @Value("#{{'Key 1':1, 'Key 2':@PersonBean, 'Key 3': @person}}") Map testMap; @RequestMapping("/test") public void testMethod() { System.out.println(testMap.get("Key 1")); PersonBean personBean = (PersonBean) testMap.get("Key 2"); System.out.println(personBean.getMessage()); Person person = (Person) testMap.get("Key 3"); System.out.println("Name: " + person.getName() + ", Address: " + person.getAddress() + ", Age: " + person.getAge()); } }
from https://stackoverflow.com/questions/32715156/inject-values-into-map-using-spring-annotation by cc-by-sa and MIT license