spring具体的分层操作:
1.spring他是我们开发中每层管家----管理你的所有的bean创建; dao层; service层; controller层;
2.使用各种编辑器; eclipse; idea;都是一样的操作;
spring中的内容:
spring中的bean类型:
我们的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 所示。
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 等结合使用。
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 来创建单例的对象;在内存存在)
我们使用这个创建好的对象就可以来使用;
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());
以后开发的过程中: 尽可的使用注解进行;(每一层都使用注解来标注:)
1.先对你的类和类之间进行有了继承关系:
2.然后再你的xml文件中进行我们的这个注入:
3.当你在测试的时候:子类就可以使用你的父类的属性和方法;
如果我们出现找不到这个文件的时候:在你的pom文件加入(这个位置是可以变化;)
<resources>
<resource>
<directory>src/man/java</directory>
<includes>
<include>/*.xml</include>
</includes>
</resource>
</resources**>
1.我们使用两个实体类: 用户类---user; dept这个类(部门类)
在你的这个dept这个类中有一个数组(对象数组);然后spring注入这个数组中的对象;
1.必须在你的实体类中有这个数组属性
2. 就是通过xml文件进行注入;
3.测试:
在你的数组中放入是具体的 值;不是对象的时候:
直接注入内容:
注入的时候;直接注入你的字符串;
如果是数组的时候可以使用 ;
2.通过xml文件注入
测试的时候直接使用遍历:
也可以哦直接注入你的值:
list 的时候他可以; 使用array; 也可以使用list;
1.1 在你的实体类中进行对应的属性
进行测试:
这个地方标签可以使用 array; list; set;
他可以注入你的基本的值: ;**也可以注入对象; **
spring注入 map
3.测试:
5.spring直接注入你的属性; propertis 这个属性文件;
1.在你的类上有这样的一个对象;
2.在你的xml文件中间注入;
3.测试:
文章浏览阅读267次。附图一张: 今天闲来无事做,就想起同程SRC有一个公开漏洞模块。然而闲的蛋疼的我就有了对其写一个爬虫将漏洞列表爬下来的冲动。有两个版本,一个是单线程的。另一个是多线程的版本。单线程版本:#coding=utf-8import requestsimport reprint "\033[0;31m "print '''●●●█〓█████████▅▄▄..._同程安全响应漏洞公开列表
文章浏览阅读129次。类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述 VARCHARL+NVARCHARjava.lang.String12 CHARNCHARjava.lang.String1 BLOBL+NBLOBjava.lang.byte[]-4..._mysql数据类型和java对应
文章浏览阅读2.4k次。本文转载自微信公众号:李浩东的博客一. 项目需求在之前我做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的开源框架,最常见的就是mycat,..._李浩东博客
文章浏览阅读980次,点赞5次,收藏2次。2023末流211SE边缘人保研记录_东南计算机 夏令营 补录
文章浏览阅读208次。人们为什么使用Python?之所以选择Python的主要因素有以下几个方面: 软件质量:在很大程度上,Python更注重可读性、一致性和软件质量,从而与脚本语言世界中的其他工具区别开发。此外,Python支持软件开发的高级重用机制。例如面向对象程序设计。 提高开发者的效率:相对于C、c++、Java等编译/静态类型语言,Python的开发者效率提高了数倍。Python代码量往往..._python 真的行么
文章浏览阅读1.7w次。Word打开文件时,提示文件扩展名和文件格式不匹配,无法打开_word无法打开文件,因为文件格式与文件扩展名
文章浏览阅读1.7k次。使用navicat视图或者sql方式新建表空间及用户会出现报错情况。总结报错原因及解决方式:方法一: 视图新建表空间及用户新建表空间:1.其他->表空间->新建表空间2.填写数据文件名称、大小、单位、自动扩展方式、下一个大小3.点击保存填写表空间名称后查看表空间4.查看表空间是否创建成功SELECT Total.name "Tablespace Name",Free_space, (total_space-Free_space) Used_space,_oracle19c创建表空间和用户
文章浏览阅读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客户端自动化测试
文章浏览阅读426次。一、为什么C语言不支持函数重载而c++能支持什么是函数重载?为什么C语言不支持函数重载,而c++能支持函数重载?解析: 函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。在C语言里需要写两个不同名称的函数来进行区分。int add1(int a, int b){ return a+b;}float add2(float a, f_式题33判断题函数重载的正确声明考点:函数重载的正确声明出现频率:★★★★(a
文章浏览阅读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
文章浏览阅读853次。 安装要求:Python版本: 2.6/2.7(安装宝塔时会自动安装)内存:128M以上,推荐512M以上(纯面板约占系统10M内存)硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间)系统:CentOS 6.x / 7.x (Ubuntu、Debian、Fedora 请点这里),确保是干净的操作系统,..._宝塔linux面板 原理
文章浏览阅读370次。技校网专门为您推荐的类似问题答案问题1:2010年浙江省计算机单靠单招别来金华!来了就后悔,学校很变态!去杭州看看,你分数不错,关注杭州下沙三金,有前途!问题2:2011浙江省各高职单考单招院校首轮投档线公布什么时候, 计算机专业的考了417 ...跟随 已跟随 取消 确定 机电问题3:2011年浙江计算机单考单招479分读哪所学校好,最好在杭州商业、机电、经济、警官、交通分数都够的上,就是各个学..._浙江省计算机单考单招