1. 程式人生 > >spring 5.1.5版本(二)

spring 5.1.5版本(二)

開發十年,就只剩下這套架構體系了! >>>   

spring 5.1.5版本(一)

spring 5.1.5版本(二)

spring 5.1.5版本(三)

物件建立方式

方式一

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--建立方式一-->
    <bean name="user" class="com.company.bean.User"></bean>
</beans>

Demo

    //建立方式一:空參構造方式
    static void func1() {
        //建立容器物件
        ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/create/applicationContext.xml");
        //從容器取user物件
        User user = (User) ac.getBean("user");
        System.out.println(user);
    }

方式二

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--建立方式二-->
    <bean name="user2" class="com.company.create.UserFactory" factory-method="createUser"></bean>

</beans>

UserFactory

package com.company.create;

import com.company.bean.User;

public class UserFactory {

    public static User createUser() {
        System.out.println("靜態工廠建立User");

        return new User();
    }
}

Demo

    //建立方式二:靜態工廠(瞭解)
    static void func2() {
        //建立容器物件
        ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/create/applicationContext.xml");
        //從容器取user物件
        User user = (User) ac.getBean("user2");
        System.out.println(user);
    }

方式三

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--建立方式三-->
    <bean name="userFactory" class="com.company.create.UserFactory" ></bean>
    <bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean>

</beans>

UserFactory

package com.company.create;

import com.company.bean.User;

public class UserFactory {

    public User createUser2() {
        System.out.println("例項工廠建立User");

        return new User();
    }
}

Demo

    //建立方式三:例項工廠(瞭解)
    static void func3() {
        //建立容器物件
        ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/create/applicationContext.xml");
        //從容器取user物件
        User user = (User) ac.getBean("user3");
        System.out.println(user);
    }

scope屬性

singleton :預設值,單例物件,被標識為單例的物件在spring容器中只會存在一個例項
prototype :多例原型,被標識為多例的物件,每次再獲得才會建立,每次建立都是新的物件。整合struts2時,ActionBean必須配置為多例 

生命週期方法

<!-- init-method:    配置一個方法作為生命週期的初始化方法
     destroy-method: 配置一個方法作為生命週期的銷燬方法 -->    
<bean name="user" class="com.company.bean.User" scope="singleton" init-method="init" destroy-method="destory"></bean>
package com.company.bean;

public class User {

    private String name;
    private Integer age;

    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 void init() {

    }
    public void destory(){

    }
}

分模組配置

    <import resource="com/company/create/applicationContext.xml"></import>

屬性注入

方式一:set方法注入

Car

package com.company.bean;

public class Car {

    private String name;
    private String color;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}

User

package com.company.bean;

public class User {

    private String name;
    private Integer age;
    private Car car;

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    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 void init() {
        System.out.println("");
    }

    public void destory() {
        System.out.println("");
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", car=" + 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--set方式注入-->
    <bean name="user" class="com.company.bean.User">
        <!-- 值型別注入:為User物件中名為name的屬性注入tom作為值-->
        <property name="name" value="tom"></property>
        <property name="age" value="20"></property>
        <!--引用型別注入-->
        <property name="car" ref="car"></property>
    </bean>

    <!--將Car物件配置到容器中-->
    <bean name="car" class="com.company.bean.Car">
        <property name="name" value="蘭博基尼"></property>
        <property name="color" value="黃色"></property>
    </bean>

</beans>

Demo

    static void func1() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/zhuru/applicationContext.xml");
        User user = (User) ac.getBean("user");
        System.out.println(user.toString());
    }

方式二:建構函式注入

User 中加入建構函式

package com.company.bean;

public class User {

    private String name;
    private Integer age;
    private Car car;

    public User(String name, Integer age, Car car) {
        this.name = name;
        this.age = age;
        this.car = car;
    }

    public User() {
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    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 void init() {
        System.out.println("");
    }

    public void destory() {
        System.out.println("");
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", car=" + 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--建構函式注入-->
    <bean name="user2" class="com.company.bean.User">
        <!-- name:  建構函式的引數名
             index: 建構函式的引數索引
             type:  建構函式的引數型別
        -->
        <constructor-arg name="name" value="zhangsan" index="0" type="java.lang.String"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="car" ref="car"></constructor-arg>
    </bean>

</beans>

方式三:p名稱空間注入

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- p名稱空間注入
         匯入p名稱空間 xmlns:p="http://www.springframework.org/schema/p"
    -->
    <bean name="user3" class="com.company.bean.User" p:name="jack" p:age="20" p:car-ref="car"></bean>
</beans>

方式四:spel注入

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--set方式注入-->
    <bean name="user" class="com.company.bean.User">
        <!-- 值型別注入:為User物件中名為name的屬性注入tom作為值-->
        <property name="name" value="tom"></property>
        <property name="age" value="20"></property>
        <!--引用型別注入-->
        <property name="car" ref="car"></property>
    </bean>

    <!--將Car物件配置到容器中-->
    <bean name="car" class="com.company.bean.Car">
        <property name="name" value="蘭博基尼"></property>
        <property name="color" value="黃色"></property>
    </bean>

    <!-- spel注入-->
    <bean name="user4" class="com.company.bean.User">
        <!-- 將user的name和age的值賦值給user4 -->
        <property name="name" value="#{user.name}"></property>
        <property name="age" value="#{user.age}"></property>
        <property name="car" ref="car"></property>
    </bean>

</beans>

複雜型別注入(陣列、List、Map、Properties)

<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <!--複雜型別注入-->

    <!--陣列-->
    <bean name="CollectionBean" class="com.company.zhuru.CollectionBean">
        <!--陣列中只有一個值-->
        <!--<property name="arr" value="tom"></property>-->

        <!--陣列中有多個值-->
        <property name="arr">
            <array>
                <value>tom</value>
                <value>zhangsan</value>
                <ref bean="user4"></ref>
            </array>
        </property>

        <!--list中只有一個值-->
        <!--<property name="list" value="tom"></property>-->

        <!--list中有多個值-->
        <property name="list">
            <list>
                <value>tom</value>
                <value>zhangsan</value>
                <ref bean="user4"></ref>
            </list>
        </property>

        <!--map-->
        <property name="map">
            <map>
                <entry key="url" value="www.baidu.com"></entry>
                <entry key="user" value-ref="user4"></entry>
                <entry key-ref="user3" value-ref="user2"></entry>
            </map>
        </property>

        <!--properties-->
        <property name="properties">
            <props>
                <prop key="class">com.company.zhuru.Demo</prop>
                <prop key="username">zhangsan</prop>
            </props>
        </property>
    </bean>
&l