Spring注解开发和注入集合_spring注解注入集合-程序员宅基地

spring具体的分层操作:

1.spring他是我们开发中每层管家----管理你的所有的bean创建; dao层; service层; controller层;

2.使用各种编辑器; eclipse; idea;都是一样的操作;

spring中的内容:

spring中的bean类型:

  • 单态 (单例模型)模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
  • 原型 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。

我们的springbean都是通过工厂的方式来创建:

BeanFactory 接口

因为 org.springframework.beans.factory.BeanFactory 是一个简单接口,所以可以针对各种底层存储方法实现。最常用的BeanFactory 定义是 XmlBeanFactory,它根据 XML 文件中的定义装入 bean,如清单 1 所示。

其实也就是说他是通过实现这个接口的方式:然后传入他的资源文件;

XmlBeanFactory ---这个也是一种创建bean的方式; 他需要使用的流;

BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));

在 XML 文件中定义的 Bean 是被消极加载的,这意味在需要 bean 之前,bean 本身不会被初始化。要从 BeanFactory 检索 bean,只需调用getBean() 方法,传入将要检索的 bean 的名称即可,如清单 2 所示。

getBean()---这个就是获取你的bean的时候:

MyBean mybean = (MyBean) factory.getBean("mybean");

每个 bean 的定义都可以是 POJO (用类名和 JavaBean 初始化属性定义) 或 FactoryBean。FactoryBean 接口为使用 Spring 框架构建的应用程序添加了一个间接的级别。

一、POJO(Plain Ordinary Java Object)。---就是你的实体类

简单而言,就是一个简单的对象,而且没有任何规则约束。有的时候拿 POJO 来泛指用来做传输对象 Java bean (包括今天要介绍的 DTO  VO  BO  PO 等)也是可以的。

二、DTO(Data Transfer Object)---能够传输数据的对象;

数据传输对象,单纯用来数据传输的对象。我们有的项目又分InDto 和OutDto ,顾名思义就是输入和输出的Dto

三、PO(Persistant Object)---就是我们在进行数据库操作的时候,那个和表关联的实体类;

持久对象,可以看成是与数据库中的表相映射的 Java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 不包含业务逻辑和数据逻辑。就是一个Entity(实体类) 或者说 ModelEntity 。

四、BO(Business Object) service 层的对象,就叫的是bo

业务对象,我经常使用的一个,它是和业务挂钩的,简单来说,我们每个业务可能需要很多 PO (数据库表)来组成,而我们返回前端页面或者返回给调用方的时候,我们需要组合。而这个时候, BO 就派上用场了,它就是一个对 PO 的组合,也可以就是 PO ,只是出发点是满足业务的传输对象。

五、VO(Value Object)

值对象,其实和 BO  DTO  PO 差不多,只是更形象化了, VO 更简单,没有任何思想,就是一个传输对象。

六、DAO(Data Access Object)

数据访问对象,通常是和数据层打交道的最后一层,通过 DAO 对数据库做识别操作,最终返回我们想要的数据。通常和我们的 PO  BO 等基础类型,如List 、Map 等结合使用。

1.spring在使用的时候他是解决我们哪个层的操作:

spring他就是后勤保障;他都可以进行服务;

当我们在使用spring的时候: 如果你是单个的加载一个文件:

如果你是多个bean的时候需要注入:

spring的运行原理:

String 工作原理:

我们的程序通过ApplicationContext 来加载我们的xml文件;

通过xml解析的方式然后把我们这个xml文件进行解析;java原始的解析xml文件的方式(1.java直接解析;dom; 2.sax解析;3.jdom;4. dom4j)

Spring来解析我们的xml文件的时候使用通过java程序然后使用dom4j库文件然后进行解析;

通过解析我们得到我们的bean中的 class; 就是一个类的名字;

通过第二步解析xml文件已经能够获取到class类的名字;然后通过我们的反射机制通过类名字,找到类;然后这个类中有他的set方法;或者构造方法;然后就解析类中的属性值传递过来到这个到对象上;-------这个时候就已经给我们产生对象;(产生对象时候使用我们的工厂模式,调用 beanfactory 来创建单例的对象;在内存存在)

我们使用这个创建好的对象就可以来使用;

2.spring使用的注解的方式:(通过注解方式来进行你的注入:)

1.注解:其实就是通过打标记的方式来,通过他的底层反射机制,然后找到你的类;

Spring为此提供了四个注解,这些注解的作用与上面的XML定义bean效果一致,在于将组件交给Spring容器管理。组件的名称默认是类名(首字母变小写),也可以自己修改:

@Component:当对组件的层次难以定位的时候使用这个注解

@Controller:表示控制层的组件

@Service:表示业务逻辑层的组件

@Repository:表示数据访问层的组件

以后在开发的过程中------你的每一层就可以通过注解来实现;

注意: 当你使用的注解开发的需要进行扫描包:

使用这些注解的时候还有一个地方需要注意,就是需要在applicationContext.xml中声明contex:component-scan...一项,指明Spring容器扫描组件的包目录。

创建一个我们实体类;(在你的实体类的上边加上注解; 根据你的具体的内容去注入;)

 

 

必须要通过xml文件进行扫描(其实就是扫描的你的包;)

当你要去扫描的时候:在你的xml文件中加入约束:

在你的xml文件中加入约束:

   <context:component-scan base-package="com.hfc.entity">
   </context:component-scan>
   
</beans>

就可以有:

进行测试:

2.当你使用注解开发的时候: 一类中引用另一个类的时候:(让我们的类之间有关系)

测试:

Teacher teacher=applicationContext.getBean("teacher", Teacher.class);
 System.out.println("我是一个老师:"+teacher.getName());
  System.out.println("我时候一个学生:"+teacher.getStudent().getName());

以后开发的过程中: 尽可的使用注解进行;(每一层都使用注解来标注:)

3.spring bean和 bean之间的继承

1.先对你的类和类之间进行有了继承关系:

2.然后再你的xml文件中进行我们的这个注入:

3.当你在测试的时候:子类就可以使用你的父类的属性和方法;

4. idea或者是eclispe他们在获取你的xml文件的时候:注意有的时候他会读不到他的文件:

如果我们出现找不到这个文件的时候:在你的pom文件加入(这个位置是可以变化;)

<resources>
 <resource>
 <directory>src/man/java</directory>
 <includes>
 <include>/*.xml</include>
 </includes>
 </resource>
 </resources**>

5. spring注入的时候注入集合(数组; list;set; map; 属性文件)

1.我们使用两个实体类: 用户类---user; dept这个类(部门类)

在你的这个dept这个类中有一个数组(对象数组);然后spring注入这个数组中的对象;

 1.必须在你的实体类中有这个数组属性

  

 2. 就是通过xml文件进行注入;

3.测试:

在你的数组中放入是具体的 值;不是对象的时候:

直接注入内容:

   

注入的时候;直接注入你的字符串;

 如果是数组的时候可以使用  ;

  1. spring注入list
  1. 1 首先你得在你的实体类上有list对象

2.通过xml文件注入

测试的时候直接使用遍历:

也可以哦直接注入你的值:

  

list 的时候他可以; 使用array; 也可以使用list;

  1. spring注入你的set

1.1 在你的实体类中进行对应的属性

  •  2.在你的xml文件进行注入:

进行测试:

 这个地方标签可以使用 array; list; set;

他可以注入你的基本的值:  ;**也可以注入对象; **

 spring注入 map

  •  1.就是你的实体类中的有map这个对象;

  •  2.springxml中进行注入

 3.测试:

 5.spring直接注入你的属性; propertis 这个属性文件;

 1.在你的类上有这样的一个对象;

2.在你的xml文件中间注入;

3.测试:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_48813970/article/details/119052616

智能推荐

[爬虫练习]爬取同程安全应急响应公开漏洞列表以及详情-程序员宅基地

文章浏览阅读267次。附图一张:  今天闲来无事做,就想起同程SRC有一个公开漏洞模块。然而闲的蛋疼的我就有了对其写一个爬虫将漏洞列表爬下来的冲动。有两个版本,一个是单线程的。另一个是多线程的版本。单线程版本:#coding=utf-8import requestsimport reprint "\033[0;31m "print '''●●●█〓█████████▅▄▄..._同程安全响应漏洞公开列表

Java数据类型和MySql数据类型对应一览 -程序员宅基地

文章浏览阅读129次。类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述 VARCHARL+NVARCHARjava.lang.String12 CHARNCHARjava.lang.String1 BLOBL+NBLOBjava.lang.byte[]-4..._mysql数据类型和java对应

SpringBoot 2.x ShardingSphere分库分表实战-程序员宅基地

文章浏览阅读2.4k次。本文转载自微信公众号:李浩东的博客一. 项目需求在之前我做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的开源框架,最常见的就是mycat,..._李浩东博客

2023推免记录_东南计算机 夏令营 补录-程序员宅基地

文章浏览阅读980次,点赞5次,收藏2次。2023末流211SE边缘人保研记录_东南计算机 夏令营 补录

你真的了解Python吗?这篇文章可以让你了解90%_python 真的行么-程序员宅基地

文章浏览阅读208次。人们为什么使用Python?之所以选择Python的主要因素有以下几个方面: 软件质量:在很大程度上,Python更注重可读性、一致性和软件质量,从而与脚本语言世界中的其他工具区别开发。此外,Python支持软件开发的高级重用机制。例如面向对象程序设计。 提高开发者的效率:相对于C、c++、Java等编译/静态类型语言,Python的开发者效率提高了数倍。Python代码量往往..._python 真的行么

Word打开文件时,提示文件扩展名和文件格式不匹配,无法打开_word无法打开文件,因为文件格式与文件扩展名-程序员宅基地

文章浏览阅读1.7w次。Word打开文件时,提示文件扩展名和文件格式不匹配,无法打开_word无法打开文件,因为文件格式与文件扩展名

随便推点

oracle19c数据库新建表空间及用户_oracle19c创建表空间和用户-程序员宅基地

文章浏览阅读1.7k次。使用navicat视图或者sql方式新建表空间及用户会出现报错情况。总结报错原因及解决方式:方法一: 视图新建表空间及用户新建表空间:1.其他->表空间->新建表空间2.填写数据文件名称、大小、单位、自动扩展方式、下一个大小3.点击保存填写表空间名称后查看表空间4.查看表空间是否创建成功SELECT Total.name "Tablespace Name",Free_space, (total_space-Free_space) Used_space,_oracle19c创建表空间和用户

Study:基于Selenium进行Android客户端自动化测试的例子。-程序员宅基地

文章浏览阅读154次。注意:此处省略ADB和Node.js的配置。 代码示例:package com.hisky.seleniumTest;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;import java..._f使用 selenium 进行android客户端自动化测试

c/c++整理--函数重载_式题33判断题函数重载的正确声明考点:函数重载的正确声明出现频率:★★★★(a-程序员宅基地

文章浏览阅读426次。一、为什么C语言不支持函数重载而c++能支持什么是函数重载?为什么C语言不支持函数重载,而c++能支持函数重载?解析:  函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。在C语言里需要写两个不同名称的函数来进行区分。int add1(int a, int b){ return a+b;}float add2(float a, f_式题33判断题函数重载的正确声明考点:函数重载的正确声明出现频率:★★★★(a

mysql怎么求四分位数_在SQL中计算2,3个四分位数的平均值-程序员宅基地

文章浏览阅读1.8k次。如果在错误的四分位数中,您可以使用IF将它们设置为零来创建四分位数值:我们假设,原始数据表是由DROP TABLE IF EXISTS `rawdata`;CREATE TABLE `rawdata` (`id` int(11) NOT NULL AUTO_INCREMENT,`url` varchar(250) NOT NULL DEFAULT '',`time` int(11) NOT NUL..._mysql 分位数sql

宝塔Linux面板 概述-程序员宅基地

文章浏览阅读853次。 安装要求:Python版本: 2.6/2.7(安装宝塔时会自动安装)内存:128M以上,推荐512M以上(纯面板约占系统10M内存)硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间)系统:CentOS 6.x / 7.x (Ubuntu、Debian、Fedora 请点这里),确保是干净的操作系统,..._宝塔linux面板 原理

浙江省单招单考计算机专业,2017 年 浙江省单考单招 计算机 专业 考试大纲-程序员宅基地

文章浏览阅读370次。技校网专门为您推荐的类似问题答案问题1:2010年浙江省计算机单靠单招别来金华!来了就后悔,学校很变态!去杭州看看,你分数不错,关注杭州下沙三金,有前途!问题2:2011浙江省各高职单考单招院校首轮投档线公布什么时候, 计算机专业的考了417 ...跟随 已跟随 取消 确定 机电问题3:2011年浙江计算机单考单招479分读哪所学校好,最好在杭州商业、机电、经济、警官、交通分数都够的上,就是各个学..._浙江省计算机单考单招