80.【Spring5】(二)

简介: 80.【Spring5】

2.使用有参构造函数创建对象(不存在无参)

实体类

package Com.Jsxs.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
public class User {
    private String name;
    public void show(){
        System.out.println("name="+name);
    }
}

(1). 使用下标进行创建对象

index----> 有参构造函数的,属性从左向右排序

<bean id="user" class="Com.Jsxs.pojo.User">
<!--     下标赋值        -->
            <constructor-arg index="0" value="吉士先生"/>
        </bean>
(2).使用类型进行创建对象

type: 指的是参数的类型,如果不是基本数据类型,那么需要使用权限定名

<bean id="user" class="Com.Jsxs.pojo.User">
<!--    类型赋值     类型必须是全限定名   -->
        <constructor-arg type="java.lang.String" value="吉士先生"/>
    </bean>
(3).使用属性名进行创建对象

name: 指的是赋值属性的属性名叫什么

<!--    直接通过参数名进行赋值-->
    <bean id="user" class="Com.Jsxs.pojo.User">
        <constructor-arg name="name" value="吉士先生"/>
    </bean>

3. 使用有参和无参构造都存在的时候

有参和无参的方法都可以用,可以同时存在,不冲突;

4.总结

在配置文件的时候,容器中已经管理的对象就已经初始化了。

(五)、Spring 配置说明

1.alias(区分大小写)

大名和小名都可以指定

<alias name="需要修改的名字" alias="修改成什么"/>

实体类

package Com.Jsxs.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    public void show(){
        System.out.println("name="+name);
    }
}

配置

<?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 id="user" class="Com.Jsxs.pojo.User">
        <property name="name" value="小明"/>
    </bean>
    <alias name="user" alias="us"/>
</beans>

测试

import Com.Jsxs.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = (User) context.getBean("us");
        user.show();
    }
}

2.bean(一个实体类一个bean)

  • id: 变量名
  • class : 类的全限定名
  • name: 可以起别名(不限制一个)
<bean id="user" class="Com.Jsxs.pojo.User" name="us,se" >
        <property name="name" value="小明"/>
    </bean>

3.import

一般用于团队的开发,它可以将多个配置文件,导入合并为一个。

不同的开发人员,有不同的beans,最后合并到一个applicationContext;

<?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">
        <import resource="beans.xml"/>
</beans>

在合并的时候,如果出现了同名且值i一样,那么就会产生覆盖。否则不会覆盖。

4.ref

意思就是:在实体类Address类中 new 一个对象叫做address2,
然后把new出来的address2赋值给实体类Student中属性名叫做address的。
<?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 id="address2" class="Com.Jsxs.pojo.Address"/>
        <bean id="student" class="Com.Jsxs.pojo.Student">
<!--    第二种: Bean注入 ref-->
            <property name="address" ref="address2"/>
        </bean>
</beans>

(六)、依赖注入

1.构造器注入

章节四就是构造器注入(有参构造就是,无参不是)

2.Set方式注入【重点】

  • 依赖注入: Set注入
  • 依赖: bean对象创建依赖于容器
  • 注入:bean对象中的所有属性,由容器来注入。
(1).环境搭建

复杂类型

package Com.Jsxs.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {
    private String address;
}

真实测试对象

package Com.Jsxs.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {
    private String name;
    private Address address;  //类对象
    private String[] books;  //数组
    private List<String> hobbys;  // list集合
    private Map<String,String> card;  //键值
    private Set<String> games;  //set集合
    private String wife;    //null
    private Properties info;  //配置
}

配置

<?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 id="student" class="Com.Jsxs.pojo.Student">
<!--    普通的set 方法注入        -->
            <property name="name" value="吉士先生"/>
        </bean>
</beans>

测试

import Com.Jsxs.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Student student = (Student) context.getBean("student");
        System.out.println(student.getName());
    }
}
(2).开始真正实现

完善注入信息

<?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 id="address2" class="Com.Jsxs.pojo.Address"/>
        <bean id="student" class="Com.Jsxs.pojo.Student">
<!--    第一种:普通注入  value-->
            <property name="name" value="吉士先生"/>
<!--    第二种: Bean注入 ref-->
            <property name="address" ref="address2"/>
<!--    第三种: 数组注入 -->
            <property name="books">
                <array>
                    <value>红楼梦</value>
                    <value>西游记</value>
                    <value>水浒传</value>
                    <value>三国演义</value>
                </array>
            </property>
<!--    第四种: list注入 -->
            <property name="hobbys">
                <list>
                    <value>唱</value>
                    <value>跳</value>
                    <value>rap</value>
                </list>
            </property>
<!--    第五种:  Map注入        -->
            <property name="card">
                <map>
                    <entry key="身份证" value="1234567894545"/>
                    <entry key="银行卡" value="1234561235445"/>
                </map>
            </property>
<!--    第六种:  Set注入        -->
            <property name="games">
                <set>
                    <value>CF</value>
                    <value>CSGO</value>
                </set>
            </property>
<!--    第七种:  NULL        -->
            <property name="wife">
                <null/>
            </property>
<!--    第八种:  properties        -->
            <property name="info">
                <props>
                    <prop key="user">root</prop>
                    <prop key="password">121788</prop>
                </props>
            </property>
        </bean>
</beans>
Student(name=吉士先生,
address=Address(address=null),
books=[红楼梦, 西游记, 水浒传, 三国演义], 
hobbys=[唱, 跳, rap], 
card={身份证=1234567894545, 银行卡=1234561235445},
games=[CF, CSGO], 
wife=null, 
info={user=root, password=121788})

3.扩展式注入

p命名是Set方式注入,需要无参构造和set方法;c命名就是构造器注入,需要有参构造函数。

(1).P标签命名空间

p 命名空间注入,可以直接注入属性的值:

xmlns:p="http://www.springframework.org/schema/p"

强转的操作,利用Class映射进行强转

User user = context.getBean("user",User.class);

实体类

package Com.Jsxs.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
}

配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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">
<!--  p: 标签命名空间  -->
        <bean id="user" class="Com.Jsxs.pojo.User" p:name="吉士先生" p:age="21"/>
</beans>

测试

@Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml");
        User user = context.getBean("user",User.class);
        System.out.println(user);
    }

(2).C标签命名空间

C通过构造器注入;

xmlns:c="http://www.springframework.org/schema/c"

配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       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">
<!--  p: 标签命名空间  -->
        <bean id="user" class="Com.Jsxs.pojo.User" p:name="吉士先生" p:age="21"/>
        <bean id="user2" class="Com.Jsxs.pojo.User" c:name="吉士先生" c:age="28"/>
</beans>
(3).总结
  • p命名是Set方式注入,需要无参构造和set方法;
  • c命名就是构造器注入,需要有参构造函数。
  • 用之前,别忘记导入约束

4.Bean作用域

(1).单列模式(默认为单列 singleton)

配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       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 id="user2" class="Com.Jsxs.pojo.User" c:name="吉士先生" c:age="28"/>
</beans>

测试

@Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml");
        User user = context.getBean("user2",User.class);
        User user1 = context.getBean("user2",User.class);
        System.out.println(user==user1);
    }

相关文章
|
9月前
|
JSON 前端开发 Java
【SpringMVC】基础入门(1)
spirngMVC,RequestMapping建立连接,RequestController,Requestparam,RequestBody传递参数、对象、数组、集合、JSON数据,JSON字符串和JAVA对象的转换
|
9月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
198 2
|
9月前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
458 2
|
11月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
392 5
|
前端开发 Java 应用服务中间件
Tomcat 与 JVM 中classpath的理解和设置总结
Tomcat 与 JVM 中classpath的理解和设置总结
441 0
|
时序数据库 Docker 容器
Docker安装InfluxDB
Docker安装InfluxDB
273 0
|
人工智能 黑灰产治理 开发者
虚拟模特,一键生成高颜值AI模特!活动震撼来袭,快来生成你的高颜值模特大片!
体验”通义万相-虚拟模特“,晒出属于你的高颜值AI模特大片,在活动页面提交作品以及使用反馈,即有机会获得反馈奖哦!
1047 11
虚拟模特,一键生成高颜值AI模特!活动震撼来袭,快来生成你的高颜值模特大片!
|
设计模式 数据可视化 编译器
【Qt】—— Qt Creator 创建项目
【Qt】—— Qt Creator 创建项目
302 0
|
开发框架 前端开发 JavaScript
推荐一个前后端分离.NetCore+Angular快速开发框架
推荐一个前后端分离.NetCore+Angular快速开发框架
210 0
|
前端开发
uniapp去除滚动条的方法
uniapp去除滚动条的方法

热门文章

最新文章