Spring 배우기(2) - Spring 프로파일 기본 속성 상세 정보

13019 단어
구조 함수를 통해 대상을 초기화하다
클래스를 만든 후, 클래스에 인삼이 있는 구조 함수를 작성하고,spring 프로필에서 대상을 초기화합니다.
package cn.net.bysoft.lesson1;

public class Car {

    public Car() {

    }

    public Car(String name, int maxSpeed, String color) {
        this.name = name;
        this.maxSpeed = maxSpeed;
        this.color = color;
    }

    public Car(String name, double price, String color) {
        this.name = name;
        this.price = price;
        this.color = color;
    }

    @Override
    public String toString() {
        return "Car [name=" + name + ", maxSpeed=" + maxSpeed + ", price="
                + price + ", color=" + color + "]";
    }
    
    //getter and setter ...

    private String name;
    private int maxSpeed;
    private double price;
    private String color;
}
<?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:util="http://www.springframework.org/schema/util"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util-4.2.xsd">

    <!--  bean  -->
    <bean id="car" class="cn.net.bysoft.lesson1.Car">
        <constructor-arg index="0" value="BMW"></constructor-arg>
        <constructor-arg index="1" value="100" type="int"></constructor-arg>
        <constructor-arg index="2" value="Red"></constructor-arg>
    </bean>

</beans>
package cn.net.bysoft.lesson1;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Lesson1Test {

    private ApplicationContext ctx;

    @Before
    public void init() {
        //  Spring 
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    }

    @Test
    public void testInitByConstructor() {
        //  
        Car car = (Car) ctx.getBean("car");
        System.out.println(car);
        /**
         * output: Car [name=BMW, maxSpeed=100, price=0.0, color=Red]
         * */
    }

}

클래스에는 두 개의 인삼을 띤 구조 함수가 있다.설정 파일에서 constructor-arg를 구조 함수의 매개 변수에 값을 부여합니다. index를 사용하여 이arg가 구조 함수 중의 몇 번째 매개 변수임을 설명하고 type으로 매개 변수 형식을 구분할 수 있습니다.
필드에 특수 문자가 있습니다.
<!--   -->
    <bean id="car2" class="cn.net.bysoft.lesson1.Car">
        <constructor-arg index="0">
            <value><![CDATA[<Audi>]]></value>
        </constructor-arg>
        <constructor-arg index="1" value="500000" type="double"></constructor-arg>
        <constructor-arg index="2" value="Red"></constructor-arg>
    </bean>
@Test
    public void testSpecialCharacter() {
        //  
        Car car = (Car) ctx.getBean("car2");
        System.out.println(car);
        /**
         * output:Car [name=<Audi>, maxSpeed=0, price=500000.0, color=Red]
         * */
    }

필드에 특수 문자가 있는 경우 코스메틱 문자열.
필드는 참조 유형입니다.
클래스의 필드가 참조 유형인 경우, 예를 들어 Person 클래스가 있는 경우, 클래스의 필드는 다음과 같이 리프 속성을 사용하여 초기화할 수 있습니다.
package cn.net.bysoft.lesson1;

public class Person {

    public Person() {

    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", car=" + car + "]";
    }

    //getter and setter

    private String name;
    private Car car;
}
<!--   -->
    <bean id="person" class="cn.net.bysoft.lesson1.Person">
        <property name="name" value="Jack"></property>
        <!--  ref bean ,car2  -->
        <property name="car" ref="car2"></property>
    </bean>
@Test
    public void testInitRef() {
        Person person = (Person) ctx.getBean("person");
        System.out.println(person.toString());
        /**
         * output:Person [name=Jack, car=Car [name=<Audi>, maxSpeed=0,
         * price=500000.0, color=Red]]
         * 
         * */
    }

내부 bean을 사용하여 인용 형식의 필드를 초기화할 수 있으며 내부 bean은 인용될 수 없습니다.
<!--  bean -->
    <bean id="person2" class="cn.net.bysoft.lesson1.Person">
        <property name="name" value="Kobe"></property>
        <!--  bean -->
        <property name="car">
            <bean class="cn.net.bysoft.lesson1.Car">
                <constructor-arg index="0">
                    <value><![CDATA[<Ferrari>]]></value>
                </constructor-arg>
                <constructor-arg index="1" value="1000000" type="double"></constructor-arg>
                <constructor-arg index="2" value="Black"></constructor-arg>
            </bean>
        </property>
    </bean>
@Test
    public void testInitRefByInner() {
        Person person = (Person) ctx.getBean("person2");
        System.out.println(person.toString());
        /**
         * output:Person [name=Kobe, car=Car [name=<Ferrari>, maxSpeed=0,
         * price=1000000.0, color=Black]]
         * */
    }

필드를 NULL로 초기화
<!--   -->
    <bean id="person3" class="cn.net.bysoft.lesson1.Person">
        <property name="name" value="Mark"></property>
        <!--  null -->
        <property name="car">
            <null />
        </property>
    </bean>
@Test
    public void testInitRefByNull() {
        Person person3 = (Person) ctx.getBean("person3");
        System.out.println(person3.toString());
        /**
         * output:Person [name=Mark, car=null]
         * */
    }

종속 연결 참조 유형 필드 설정
ref를 사용하여 대상을 인용한 후 카를 사용할 수 있습니다.price, 사용 대상.필드는 참조 객체에 대해 다음과 같은 속성을 부여합니다.
<!--   -->
    <bean id="person4" class="cn.net.bysoft.lesson1.Person">
        <property name="name" value="Mary"></property>
        <!--  null -->
        <property name="car" ref="car"></property>
        <!--   -->
        <property name="car.price" value="250000"></property>
    </bean>
@Test
    public void testInitRefByCascade() {
        Person person4 = (Person) ctx.getBean("person4");
        System.out.println(person4.toString());
        /**
         * output:Person [name=Mary, car=Car [name=BMW, maxSpeed=100,
         * price=250000.0, color=Red]]
         * */
    }

컬렉션 속성 초기화
어떤 객체에는 List 또는 Map과 같은 컬렉션 속성이 있습니다.예를 들어 하나의 Company 클래스에는 두 가지 속성이 있는데 하나는 List이고 하나는Map이다.spring에서는 다음과 같이 list 및 map 태그를 설정할 수 있습니다.
package cn.net.bysoft.lesson1;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Company {

    public Company() {

    }

    @Override
    public String toString() {
        return "Company [name=" + name + ", cars=" + cars + ", carList="
                + carList + "]";
    }

    // getter and setter

    private String name;
    private List<Car> cars = new ArrayList<Car>();
    private Map<String, Car> carList = new HashMap<String, Car>();
}
<!--   -->
    <bean id="company" class="cn.net.bysoft.lesson1.Company">
        <property name="name" value="Spring"></property>
        <!-- list  -->
        <property name="cars">
            <list>
                <ref bean="car" />
                <ref bean="car2" />
            </list>
        </property>
        <!-- map  -->
        <property name="carList">
            <map>
                <entry key="FirstCar" value-ref="car"></entry>
                <entry key="SecondCar" value-ref="car2"></entry>
            </map>
        </property>
    </bean>
@Test
    public void testInitListOrMap() {
        Company company = (Company) ctx.getBean("company");
        System.out.println(company.toString());
        /**
         * output:Company [name=Spring, cars=[Car [name=BMW, maxSpeed=100,
         * price=250000.0, color=Red], Car [name=<Audi>, maxSpeed=0,
         * price=500000.0, color=Red]], carList={FirstCar=Car [name=BMW,
         * maxSpeed=100, price=250000.0, color=Red], SecondCar=Car [name=<Audi>,
         * maxSpeed=0, price=500000.0, color=Red]}]
         * */
    }

Properties 객체 초기화
spring은 우리에게java를 제공했다.util.Properties 객체의 초기화 기능, 예를 들어 데이터베이스의 연결 정보를 저장하는 DataSource 클래스가 있으면spring 프로필에서 초기화할 수 있습니다.
package cn.net.bysoft.lesson1;

import java.util.Properties;

public class DataSource {

    public DataSource() {
        
    }

    @Override
    public String toString() {
        return "DataSource [prop=" + prop + "]";
    }

    // getter and setter

    private Properties prop;
}
<!--  properties  -->
    <bean id="dataSource" class="cn.net.bysoft.lesson1.DataSource">
        <property name="prop">
            <props>
                <prop key="user">root</prop>
                <prop key="password">root</prop>
            </props>
        </property>
    </bean>
@Test
    public void testInitProperties() {
        DataSource ds = (DataSource) ctx.getBean("dataSource");
        System.out.println(ds.toString());
        /**
         * output:DataSource [prop={user=root, password=root}]
         * */
    }

util 탭을 사용하여 공용 데이터 설정하기
상소의 초기화 집합은 모두 bean의 내부에 있습니다. 만약에 여러 개의 bean이 같은 집합을 초기화하려면 다각적인 정의가 필요합니다.spring은 우리에게 공용 데이터의 설정을 제공했습니다.spring 설정 파일의 맨 위에 util 정보를 가져옵니다.
<?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:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util-4.2.xsd">

다음에 util:list 및 util:map 정보를 구성합니다.
<!--   -->
    <util:list id="util-cars-list">
        <ref bean="car" />
        <ref bean="car2" />
    </util:list>
    <util:map id="util-cars-map">
        <entry key="FirstCar" value-ref="car"></entry>
        <entry key="SecondCar" value-ref="car2"></entry>
    </util:map>

    <!--   -->
    <bean id="company2" class="cn.net.bysoft.lesson1.Company">
        <property name="name" value="Hibernate"></property>
        <!-- list  -->
        <property name="cars" ref="util-cars-list"></property>
        <!-- map  -->
        <property name="carList" ref="util-cars-map"></property>
    </bean>
@Test
    public void testInitByUtil() {
        Company company2 = (Company) ctx.getBean("company2");
        System.out.println(company2);
        /**
         * output:Company [name=Hibernate, cars=[Car [name=BMW, maxSpeed=100...
         * */
    }

p 태그 사용
p 태그의 xmlns를 가져오고 p 태그를 사용하여 객체의 속성을 초기화합니다.
xmlns:p="http://www.springframework.org/schema/p"
<bean id="xx" class="xxx.Person" p:car-ref="car" p:name="Nick"></bean>

좋은 웹페이지 즐겨찾기