文档章节

spring 5.1.5版本(二)

mouos
 mouos
发布于 03/26 21:26
字数 1506
阅读 70
收藏 0

spring 5.1.5版本(一)

spring 5.1.5版本(二)

spring 5.1.5版本(三)

spring 5.1.5版本(四)

spring 5.1.5版本(五)

demo地址:https://gitee.com/gwlCode/springDemo

对象创建方式

方式一

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>
</beans>

© 著作权归作者所有

mouos
粉丝 1
博文 263
码字总数 137404
作品 0
其它
私信 提问
Spring Data Lovelace SR5 发布

Spring Data 团队宣布推出 Lovelace SR5 维护版本,此版本基于最新的 Spring Framework 5.1.5。此外,为了方便开发者,Spring Boot 2.1.3 也将提供对其的支持。 该版本的发布主要是修复 bug ...

局长
02/14
881
0
Spring Framework 5.1.5 发布,Bug 修复和改进

Spring Framework 最新版本 5.1.5 已发布,该维护版包含了总计超过 40 项的 bug 修复和改进。 下面简单介绍一下值得关注的新变化: 对于无效的赋值,SpringEL 不应抛出 IllegalAccessError 异...

局长
02/14
1K
0
Grails 4 GA 发布,Groovy 的 Web 开发框架

Grails 4 GA 已发布,Grails 是一套用于快速 Web 应用开发的开源框架,它基于 Groovy 编程语言,并构建于 Spring、Hibernate 和其它标准 Java 框架之上。 Grails 4 带来重大升级,该框架现在...

afterer
07/14
1K
6
bboss v5.2.3 发布,Elasticsearch Rest Client

The best Elasticsearch Highlevel Rest Client API-----bboss v5.2.3 发布。 主要功能特色 ElasticSearch兼容性:2.x,5.x,6.x,+ JDK兼容性: jdk 1.7+ Spring boot兼容性:1.x,2.x ORM和DSL二......

bboss
2018/12/13
734
0
Mybatis 分页插件 PageHelper 5.1.5 发布

如果你也在用 Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 该插件目前支持以下数据库的物理分页 Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005+) I...

Liuzh_533
2018/09/03
2.5K
6

没有更多内容

加载失败,请刷新页面

加载更多

web前端开发初级

Web 页面制作基础 Web 的相关概念 WWW Website URL Web Standard Web Browser Web Server HTML 基础 标记语言 从 HTML 到 XHTML HTML 的基本结构 HTML 的相关基本定义 HTML 常用开发工具 HT...

达达前端小酒馆
17分钟前
2
0
PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
15
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部