SPRING-了解1

news2024/12/28 11:47:23

1)最终address: 

查找路径比较长,很有趣

     JFrog

原始步骤1)进入 spring.io,点击右上角黑色标记边的标记

2)进入 git,找到  Binaries下面的 Spring Framework Artifacts

3)进一步找到Downlaoding a Distribution,下面有  https://repo.spring.io

 4)x选择artifactory,spring 

 复制url to file

 下载最新版  -dist.zip

2.新建项目

  

 四个核心jar:bean core context expression

 还缺一个

下载binaries zip解压

复制5个jar到这里lib

导入到项目

src 下创建XML文件

IOC原理

 IOC基于ICO容器完成,其底层就是bean工厂

xml+反射

 

 Application context类结构

ctrl+h

上面有FileSystemXML和classPathXml,前者指物理路径,后者指相对于src路径

对比beanFactory

,在上面ctrl+H 打开

绿色是接口,蓝色是实现类

 其下比较重要的接口是

 IOC操作Bean管理

1)创建对象“编写xml文件

2)注入属性:不用setter/getter设置属性

两种实现方式:

 1)基于XML配置实现

    a)对象创建

   b)

2)基于注解实现

 基于XML配置创建对象

     2.1)在XML中使用bean标签,并配置对应属性

<bean id="user" class="com.i7i8i9.spring5.User"></bean>

   2.2) id属性:获取对象的唯一标记

     class属性:创建对象所在的类的全路径

name属性:里面可以有符号比如/,以前用于struts1 现在不太用

3)默认调用无参构造方法

    如果只有有参构造函数,那么

No default constructor found; nested exception is java.lang.NoSuchMethodException:

3)基于XML注入属性

     DI:依赖注入,需要在创建对象基础上完成

第一种注入:set方法

第二种:通过有参构造函数注入

第三种:通过xml

<bean id="book" class="com.i7i8i9.spring5.Book">
    <property name="bName" value="八卦"></property>
    <property name="bAuthor" value="杜甫"></property>

</bean>

测试

public class TestBook1 {
@Test
    public void testBook1(){
        BeanFactory context=new ClassPathXmlApplicationContext("bean1.xml");
        Book book=context.getBean("book", Book.class);
        System.out.println(book.getbName());
    }

//bean1.xml是指在src下的目录

ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
Book book=context.getBean("book", Book.class);
System.out.println(book.getbName());

3)使用有参构造注入

    <bean id="orders" class="com.i7i8i9.spring5.Orders"> <constructor-arg name="oName" value="订单名称"></constructor-arg> <constructor-arg name="address" value="东京"></constructor-arg>
<!-- 还可以通过索引值来赋值--> <constructor-arg index="0" value="ff"></constructor-arg> </bean>

测试:

   

@Test
public void TestOrders(){
    ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
    Orders orders= context.getBean("orders",Orders.class);
    orders.ordersTest();

}

4)p名称空间注入

  针对 xml property标签的简化

 给xml文件添加p约束

,也叫p空间 

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

<bean id="book" class="com.i7i8i9.spring5.Book" p:bName="唐诗三百首" p:bAuthor="王维"> </bean>

5)设置其他类型

  I. 字面量:null   特殊符号

xml中:

<property name="bAddress">
    <null></null>
</property>

  II. 转义

<property name="bAddress" value="&lt;&gt;南京"></property>

  1) &lt;&gt; 即<>

2)特殊符号处理方法2:value标签下增加<![[]]>

第二个中括号前写CDATA   ,  里面就是要呈现的值<<>>

<property name="bAddress">
    <value>
        <![CDATA[<<南京>>]]>
    </value>

</property>

  III.内部外部bean和级联赋值

   1)外部bean:如通过service调用dao方法

    -> xml中定义两个bean,属性使用 ref

     

    <bean id="userSeivice" class="com.i7i8i9.spring5.service.UserService">
<!--        names是属性名称,非字面量不能用data,只能用ref,内容就是xml定义bean的id值-->
    <property name="userDao" ref="userDao1"></property>

</bean>
<!--    必须用实现类,不能用接口放在class里面-->
    <bean id="userDao1" class="com.i7i8i9.spring5.dao.UserDaoImpl"></bean>

2)内部beanneibu bean就是xml中bin里面有bin

   举例:部门与员工就是1对多,通过在员工类中增加部门属性实现

   

public class Department {
    private  String dName;

    public void setdName(String dName) {
        this.dName = dName;
    }
}
public class Employee {
    private String eName;
    private String gender;

    public void setDepartment(Department department) {
        this.department = department;
    }

    //员工所属部门
    private Department department;

    public void seteName(String eName) {
        this.eName = eName;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

设置xml,在bean里面加bean,把department认为是employee的属性

<bean id="employee" class="com.i7i8i9.spring5.bean.Employee">
      <property name="eName" value="杜甫"></property>
        <property name="gender" value="男"></property>
        <property name="department">
            <bean id="department" class="com.i7i8i9.spring5.bean.Department"> 
            <property name="dName" value="财务部"></property></bean>
        </property>
    </bean>

3)级联1:xml中使用外部bin +ref

<bean id="department" class="com.i7i8i9.spring5.bean.Department">
<!--        级联赋值方式1:外部bin-->
        <property name="dName" value="财务部"></property></bean>

    <bean id="employee" class="com.i7i8i9.spring5.bean.Employee">
        <property name="eName" value="杜甫"></property>
        <property name="gender" value="男"></property>
        <property name="department" ref="department"></property>

    </bean>

方式2:表达式形式: 

department.dName

java类需要设置针对对象属性设置get方法

XML 
<bean id="employee" class="com.i7i8i9.spring5.bean.Employee">
        <property name="eName" value="李清照"></property>
        <property name="gender" value="女"></property>
        <property name="department" ref="department"></property>
        <property name="department.dName" value="信息部"></property>

    </bean>

java类需要设置针对对象属性设置get方法
 public Department getDepartment() {
        return department;
    }

4)注入集合类

    注入数组

    

类:
public class Students {
    private String[] courses;
    private List<String> list;
    private Map<String,String> maps;
    private Set<String> sets;

    public void setSets(Set<String> sets) {
        this.sets = sets;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMaps(Map<String, String> maps) {
        this.maps = maps;
    }

    public void setCourses(String[] courses) {
        this.courses = courses;
    }
}
XML:
<bean id="students" class="com.i7i8i9.spring5.collectiontype.Students">
<!--       数组,用list或array-->
       <property name="courses">
         <array>
             <value>英语</value>
             <value>音乐</value>
         </array>

       </property>

       <!--       集合-->
       <property name="list">
           <list>
               <value>李白</value>
               <value>杜甫</value>

           </list>

       </property>
       <!--       Map-->
       <property name="maps">
           <map>
               <entry key="Cat" value="cat"></entry>
               <entry key="Dog" value="dog"></entry>
           </map>

       </property>
       <!--      Set-->
       <property name="sets">
           <set>
               <value>China</value>
               <value>USA</value>
           </set>
       </property>

   </bean>

在集合里面设置对象值

1)在xml中创建多个对象,再把对象写入ref

  <property name="coursesList">
           <list>
               <ref bean="course1"></ref>
               <ref bean="course2"></ref>
               <ref bean="course3"></ref>
               <ref bean="course4"></ref>
           </list>
       </property>

   </bean>
<!--    定义多个课程对象-->
    <bean id="course1" class="com.i7i8i9.spring5.collectiontype.Courses">
        <property name="cNames" value="法语"></property>
    </bean>
    <bean id="course2" class="com.i7i8i9.spring5.collectiontype.Courses">
        <property name="cNames" value="西班牙语"></property>
    </bean>
    <bean id="course3" class="com.i7i8i9.spring5.collectiontype.Courses">
        <property name="cNames" value="德语"></property>
    </bean>
    <bean id="course4" class="com.i7i8i9.spring5.collectiontype.Courses">
        <property name="cNames" value="韩语"></property>
    </bean>

把集合注入部分提取出来

1)XML引入名称空间util

xmlns:utl="http://www.springframework.org/schema/util"

同时,xsi中也要复制一个http,并把里面的beans改成util,一共三处

<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:utl="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
">

2)使用util标签

<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:utl="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
">
<!--    提取-->
<utl:list id="bookList">
    <value>苏州</value>
    <value>杭州</value>
    <value>扬州</value>

</utl:list>
<!--    注入-->
    <bean id="book" class="com.i7i8i9.spring5.collectiontype.Book">
        <property name="list" ref="bookList">

        </property>
    </bean>
</beans>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客SQL每日一题之SQL136 每类试卷得分前3名

文章目录SQL136 每类试卷得分前3名描述示例1输入&#xff1a;输出&#xff1a;答案SQL136 每类试卷得分前3名 描述 现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间&#xff09;&#x…

C# 中的 Infinity 和 NaN

C# 语言中&#xff0c;对于 int&#xff0c;long 和 decimal 类型的数&#xff0c;任何数除以 0 所得的结果是无穷大&#xff0c;不在 int&#xff0c;long 和 decimal 类型的范围之内&#xff0c;所以计算 6/0 之类的表达式会出错。 但是&#xff0c;double 和 float 类型实际…

Java入门笔记补充

Java基础笔记补充数据类型数据类型整形拓展浮点型拓展字符型拓展类型转换变量变量作用域局部变量实例变量静态变量变量的命名规范数组三种初始化静态初始化动态初始化数组的默认初始化Arrays类内存分析栈 stack&#xff1a;堆 heap&#xff1a;方法区(也是堆)&#xff1a;封装继…

卷积神经网络 图像处理,卷积神经网络图片处理

1、在做图像处理时&#xff0c;如何提高识别算法的设计与效果的精度&#xff1f; 得到更多的数据 这无疑是最简单的解决办法&#xff0c;深度学习模型的强大程度取决于你带来的数据。增加验证准确性的最简单方法之一是添加更多数据。如果您没有很多训练实例&#xff0c;这将特…

AllegroBGA如何自动fanout操作指导

AllegroBGA如何自动fanout操作指导 当我们需要给BGA做fanout的时候,逐个pin去fanout是件比较麻烦的事情,下面介绍Allegro中如何自动fanout,以下图BGA为例 具体操作如下 选择Route-Create Fanout 选择Via类型,比如Via10 Via Direction BGA Quadrant Style Pin-via Space…

数字化母婴店,母婴智慧会员管理小程序

会员店想必很多小伙伴都接触过或有所耳闻&#xff0c;会员店的本质是通过好产品、好服务及好内容营造出完整且完美的用户消费体验&#xff0c;虽然纯会员店并不多&#xff0c;但如今越来越多的各行业商家意识到每个流量用户都很重要&#xff0c;需要维护好每个用户&#xff0c;…

18.Django大型项目之用户中心页面

1. 用户中心的搭建 1.1 基础搭建 这里&#xff0c;主要就是基础的页面渲染&#xff0c;使用的也是继承主模板&#xff0c;对其进行修改的方式。就直接看代码吧 1.2 上下文的应用 什么是上下文&#xff1f; 对于上下文&#xff0c;可以理解成一个公用的函数或者类 我们这里使…

Qt使用MSVC2015找不到编译器的解决办法

Qt使用MSVC2015找不到编译器的解决办法 1、问题描述 安装qt前&#xff0c;已安装vscode&#xff0c;构建套件MSVC2015 32/64bit出现红色感叹号&#xff0c;并报错构建套件中未设置编译器 2、解决办法 step1:通过windows SDK工具安装调试器。 工具下载地址&#xff1a;https:/…

244. 谜一样的牛——二分+树状数组

有 n 头奶牛&#xff0c;已知它们的身高为 1∼n 且各不相同&#xff0c;但不知道每头奶牛的具体身高。 现在这 n 头奶牛站成一列&#xff0c;已知第 i 头牛前面有 Ai 头牛比它低&#xff0c;求每头奶牛的身高。 输入格式 第 1 行&#xff1a;输入整数 n。 第 2…n 行&#x…

Linux——组管理和权限管理

Linux组 基本介绍 在Linux中的每个用户必须属于一个组&#xff0c;不能独立于组外&#xff0c;在Linux中每个文件有所有者&#xff0c;所在组&#xff0c;其他组的概念。 所有者 一般为文件的创建者&#xff0c;谁创建了该文件&#xff0c;就自然的成为该文件的所有者。 查…

构造序列(模拟构造)

请你构造一个 01 序列&#xff0c;序列需要满足以下所有要求&#xff1a; 恰好包含 n 个 0 和 m 个 1。不存在两个或两个以上的 0 连续相邻。不存在三个或三个以上的 1 连续相邻。 输入格式 共一行&#xff0c;包含两个整数 n,m。 输出格式 输出共一行&#xff0c;如果存在…

【js记录】递归进行深拷贝时对于Object遍历方法的思考【深浅拷贝+object县官属性介绍+类型判断方法+for...in+for...of】

一、 前言&#xff1a;本文使用的 类型判断方法介绍 通过手写instaceof更好理解其作用及使用 1、 typeof 判断一个实例属于哪种类型 2、 instance 判断一个实例是否属于某种类型let person function(){ } let no new person(); no instanceof person; // true3、 原型…

IT分销商未来在哪里?南京创瑞丰向复合型产品方案商转型

在一个充满不确定性的市场中&#xff0c;思变求新是企业的唯一出路。 诚如IT分销领域&#xff0c;云计算、大数据、人工智能等技术的兴起&#xff0c;加速企业数字化转型的同时&#xff0c;亦对于传统IT分销市场的未来产生了深远影响。过去“搬箱子”、打价格战的方式方法正在…

Python中文件操作(读、写、关闭)

目录 一.什么是文件 二.python文件操作 1.open&#xff08;&#xff09;打开函数 注意 mode常用的三种基础访问模式 2.读操作相关方法 read&#xff08;&#xff09;方法&#xff1a; readlines&#xff08;&#xff09;方法: readline&#xff08;&#xff09;方法 for…

Linux性能学习(1.1):CPU_CPU缓存

文章目录1 简介2 工作机制3 Cache Line参考资料&#xff1a; 1. https://www.makeuseof.com/tag/what-is-cpu-cache/ 2. https://zhuanlan.zhihu.com/p/80672073 3.CPU Cache 机制以及 Cache miss 4.性能优化方法和技巧 在日常的嵌入式开发中&#xff0c;查看一些SOC的datashe…

想学习编程,该怎么开始,需要多长时间?

想学习编程,该怎么开始&#xff0c;需要多长时间&#xff1f; 其实学编程也没有啥特别的方法&#xff0c;和我们没基础学驾照差不多。 考A照、B照还是C照&#xff0c;我们先得拎清&#xff0c;它们的用途存在一定差异 。一样的&#xff0c;学编程是学C&#xff0c;Java、Pyth…

命令行在服务器的Oracle新建、修改用户并授权

1.前提解说 由于我是使用docker拉取的Oracle,这里截图的Oracle用户是原本安装好的Oracle用户。 2.步骤 1.Linux服务器切换到Oracle su oracle 2. 进入SQL sqlplus / as sysdba 3.新建用户(一定要加“&#xff1b;”) create user 用户名 identified by 密码&#xff1b; 若是修…

Tableau可视化设计案例-02Tableau数据处理、折线图

文章目录Tableau可视化设计案例02Tableau数据处理、折线图1.数据前处理2.绘制折线图2.1 创建电影数据变化折线图2.2创建电影票房变化折线图2.3 20215年的电影数量与票房比较分析Tableau可视化设计案例 本文是Tableau的案例&#xff0c;为B站视频的笔记&#xff0c;B站视频 参考…

Java集合/泛型面试题

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

作为文科生,如何才能学好一门编程语言?

学习新知识的过程总是痛苦和逆人性的&#xff0c;古往今来皆是如此&#xff0c;否则也不会有十年寒窗苦读一说。 相信此刻看这篇文章的你&#xff0c;经历的寒窗绝对不止十年。 从小学开始算起到大学毕业&#xff0c;绝大多数人起码经历了16年&#xff08;跳级的神童与学霸除…