상세 해석 Spring 프레임 워 크---IOC 조립 Bean
(1)Spring 프레임 Bean 의 예화 방식 은 세 가지 방식 으로 빈 을 예화 시 켰 다.
실례 공장 실례 화
이 세 가지 방법의 applicationContext.xml 프로필 을 먼저 쓰 겠 습 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<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: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">
<!-- Bean =================== -->
<!-- 2.1 -->
<bean id="bean1" class="com.study.spring.b_instance.Bean1"></bean>
<!-- 2.2 factory-method -->
<bean id="bean2" class="com.study.spring.b_instance.Bean2" factory-method="createInstance"></bean>
<!-- 2.3 -->
<bean id="bean3Factory" class="com.study.spring.b_instance.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getInstance"></bean>
<!-- end.Bean ==================== -->
Bean 1 클래스
public class Bean1 {
//
}
Bean 2 클래스
public class Bean2 {
private static Bean2 Bean2 = new Bean2();
private Bean2() {
}
public static Bean2 createInstance() {
return Bean2;
}
}
Bean 3 클래스
public class Bean3 {
}
Bean3Pactory 류
public class Bean3Factory {
private Bean3Factory(){
}
public Bean3 getInstance(){
return new Bean3();
}
}
테스트 클래스 InstanceDemo
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceDemo {
//
@Test
public void demo3(){
//
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Bean3 bean3 =(Bean3) applicationContext.getBean("bean3");
System.out.println(bean3);
}
//
@Test
public void demo2(){
//
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Bean2 bean2 =(Bean2) applicationContext.getBean("bean2");
System.out.println(bean2);
}
// bean
@Test
public void demo1(){
//
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 =(Bean1) applicationContext.getBean("bean1");
System.out.println(bean1);
}
}
/*
* com.study.spring.b_instance.Bean1@7229c204
*/
(2).bean 의 기타 설정:일반적으로 빈 을 설치 할 때 빈 의 이름 으로 id 속성 을 지정 합 니 다.
id 속성 은 IoC 용기 에서 유일 해 야 합 니 다.
id 의 이름 이 XML 의 ID 속성 에 대한 명명 규범 을 만족 시 키 려 면 알파벳 으로 시작 해 야 합 니 다.알파벳,숫자,연결 문자,밑줄,문장,콜론 을 사용 할 수 있 습 니 다.
빈 의 이름 에 특수 문자 가 포함 되 어 있 으 면 name 속성 을 사용 해 야 합 니 다.예 를 들 어
name 속성 이 같 을 수 있 기 때문에 뒤에 Bean 이 나타 나 면 그 전에 나 온 동명 의 Bean 을 덮어 씁 니 다.
id 와 name 의 차이 점:
id XML 제약 을 준수 하 는 id 의 제약.id 제약 은 이 속성의 값 이 유일한 것 임 을 보증 합 니 다.또한 자모 로 시작 해 야 합 니 다.자모,숫자,연결 문자,밑줄,문장,사칭 을 사용 할 수 있 습 니 다.
name 에 이러한 요구 사항 이 없습니다.
bean 탭 에 id 가 설정 되 어 있 지 않 으 면 name 은 id 로 사용 할 수 있 습 니 다.
Bean 의 scope 속성
<!-- 3.Bean scope ==================== -->
<bean id="product" class="com.study.spring.c_scope.Product" scope="singleton"></bean>
<!-- end.Bean scope =========== -->
* singleton:단일 예.(기본 값.)* prototype:여러 가지.
*request:웹 개발 중.이 대상 을 request 범위,request.setAttribute()에 저장 하 는 대상 을 만 들 었 습 니 다.
*session:웹 개발 중.이 대상 을 session 범위,session.setAttribute()에 저장 하 는 대상 을 만 들 었 습 니 다.
*globalSession:일반적으로 Porlet 응용 환경 에 사 용 됩 니 다.분포 식 개발 을 말 합 니 다.porlet 환경 이 아니 라 globalSession 은 session 과 같 습 니 다.
3.Bean 속성의 의존 주입
앞에서 대상 을 어떻게 얻 는 지 알 고 있 습 니 다.대상 에 게 주 는 속성 할당 을 알 아야 합 니 다.
다음은 예 를 들 어 설명 한다.
자동차 종류
public class Car {
private String name;
private double price;
public Car(String name, double price) {
super();
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Car [name=" + name + ", price=" + price + "]";
}
}
Car 2 류
public class Car2 {
private String name;
private double price;
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Car2 [name=" + name + ", price=" + price + "]";
}
}
CarInfo 클래스
public class CarInfo {
public String getName(){
return " H6";
}
public double caculatePrice(){
return 110000;
}
}
Collection Bean 클래스
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class CollectionBean {
private String name;
private Integer age;
private List<String> hobbies;
private Set<Integer> numbers;
private Map<String, String> map;
private Properties properties;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<String> getHobbies() {
return hobbies;
}
public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}
public Set<Integer> getNumbers() {
return numbers;
}
public void setNumbers(Set<Integer> numbers) {
this.numbers = numbers;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
@Override
public String toString() {
return "CollectionBean [name=" + name + ", age=" + age + ", hobbies=" + hobbies + ", numbers=" + numbers
+ ", map=" + map + ", properties=" + properties + "]";
}
}
Employee 클래스
public class Employee {
private String name;
private Car2 car2;
public void setName(String name) {
this.name = name;
}
public void setCar2(Car2 car2) {
this.car2 = car2;
}
@Override
public String toString() {
return "Employee [name=" + name + ", car2=" + car2 + "]";
}
}
TestDi 테스트 클래스
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDi {
@Test
public void demo6() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
CollectionBean collectionBean = (CollectionBean) applicationContext.getBean("collectionBean");
System.out.println(collectionBean);
}
@Test
public void demo5() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Car2 car2 = (Car2) applicationContext.getBean("car2_2");
System.out.println(car2);
}
@Test
public void demo4() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Employee e = (Employee) applicationContext.getBean("employee2");
System.out.println(e);
}
@Test
public void demo3() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Employee e = (Employee) applicationContext.getBean("employee");
System.out.println(e);
}
@Test
public void demo2() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Car2 car2 = (Car2) applicationContext.getBean("car2");
System.out.println(car2);
}
@Test
public void demo1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Car car = (Car) applicationContext.getBean("car");
System.out.println(car);
}
}
위의 이 몇 가지 유형 은 모두 가장 중요 한 것 이 아니다.우 리 는 주로 프로필 을 어떻게 쓰 는 지 보 는 것 이 가장 관건 적 인 것 이다.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<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: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">
<!-- Bean =========== -->
<!-- 4.1 -->
<bean id="car" class="com.study.spring.e_di.Car">
<!-- . -->
<!-- <constructor-arg index="0" value=" "></constructor-arg>
<constructor-arg index="1" value="1500000"></constructor-arg> -->
<!-- . -->
<!-- <constructor-arg name="name" value=" "></constructor-arg>
<constructor-arg name="price" value="500000"></constructor-arg> -->
<!-- . -->
<constructor-arg type="java.lang.String" value=" "></constructor-arg>
<constructor-arg type="double" value="600000"></constructor-arg>
</bean>
<!-- 4.2setter -->
<bean id="car2" class="com.study.spring.e_di.Car2">
<property name="name" value=" "></property>
<property name="price" value="100000"></property>
</bean>
<bean id="employee" class="com.study.spring.e_di.Employee">
<property name="name" value=" "></property>
<property name="car2" ref="car2"></property>
</bean>
<!-- p --><!-- p , sxd xmlns:p="http://www.springframework.org/schema/p"-->
<bean id="car22" class="com.study.spring.e_di.Car2" p:name=" " p:price="500000">
</bean>
<bean id="employee2" class="com.study.spring.e_di.Employee" p:name=" " p:car2-ref="car22"></bean>
<!-- spEL -->
<bean id="carInfo" class="com.study.spring.e_di.CarInfo"></bean>
<bean id="car2_2" class="com.study.spring.e_di.Car2">
<property name="name" value="#{carInfo.name}"></property>
<property name="price" value="#{carInfo.caculatePrice()}"></property>
</bean>
<!-- -->
<bean id="collectionBean" class="com.study.spring.e_di.CollectionBean">
<!-- -->
<property name="name" value=" "></property>
<property name="age" value="12"></property>
<!-- list -->
<property name="hobbies">
<list>
<value> </value>
<value> </value>
<value> </value>
</list>
</property>
<!-- set -->
<property name="numbers">
<set>
<value>10</value>
<value>20</value>
<value>30</value>
<value>40</value>
<value>50</value>
</set>
</property>
<!-- map -->
<property name="map">
<map>
<entry key="birthday" value="2017-1-1"></entry>
<entry key="address" value=" "></entry>
<entry key="sex" value="female"></entry>
</map>
</property>
<!-- Properties -->
<property name="properties">
<props>
<prop key="compamy"> </prop>
<prop key="pnum">200</prop>
</props>
</property>
</bean>
<!-- end Bean ============ -->
<import resource="classpath:bean1.xml"/>
<import resource="classpath:bean2.xml"/>
<!-- src beans.xml -->
</beans>
applicationContext.xml 에 관 한 이 프로필 의 내용 은 반드시 이해 해 야 합 니 다.제 가 쓴 것 은 비교적 기본 적 이 고 전면적 입 니 다.네 임 스페이스 p 사용 에 대해 설명 하 겠 습 니 다.
p:<속성 명>="xxx"상수 치 도입
p:<속성 명>-ref="xxx"다른 Bean 대상 참조
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.