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 所示。
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.测试:
在你的数组中放入是具体的 值;不是对象的时候:
直接注入内容:
注入的时候;直接注入你的字符串;
如果是数组的时候可以使用 ;
- spring注入list
- 1 首先你得在你的实体类上有list对象
2.通过xml文件注入
测试的时候直接使用遍历:
也可以哦直接注入你的值:
list 的时候他可以; 使用array; 也可以使用list;
- spring注入你的set
1.1 在你的实体类中进行对应的属性
- 2.在你的xml文件进行注入:
进行测试:
这个地方标签可以使用 array; list; set;
他可以注入你的基本的值: ;**也可以注入对象; **
spring注入 map
- 1.就是你的实体类中的有map这个对象;
- 2.springxml中进行注入
3.测试:
5.spring直接注入你的属性; propertis 这个属性文件;
1.在你的类上有这样的一个对象;
2.在你的xml文件中间注入;
3.测试: