JAVA 框架-Spring

一.准备工作

1.下载spring工具插件,在STS官网找到与eclipse对应版本的下载链接地址,复制该地址打开eclipse里的Help菜单,选择Install new Software选项,将地址粘贴到work with输入框中,点击add按钮,此时Location输入框中出现粘贴的地址,确定后会出现如图选项,选中该4个,将左下角的自动更新勾去掉,点击下一步开始在线安装。

等系统加载完成后会要求自动重启软件,再次启动后会出现欢迎界面中的spring选项,说明安装完成。

引入spring框架所需要的21个jar包及commons-logging-1.2.jar包。

新建一个Spring Bean Configuration File 文件,在里面写spring的配置文件

二.spring简介

在spring出现前使用Enterprise java bean(EJB)框架,该框架复杂且破环类的结构。
Spring 创始人Rod Johnson, 包含的类有1400多个
Spring也是java代码, 里面运用了很多java中的相关技术, 比如反射, 注解, 网络通信等,
Spring并不是一门独立的语言, 实际上就是java语言写的一个封装

Spring能做的事情:
    1, 方便解耦, 简化开发
    2, AOP(Aspect Oriented Programming, 面向切面编程)的支持
    3, 声明式事务的支持
    4, 方便程序的测试
    5, 方便集成各种优秀的框架(MyBatis, Hibernate, Shiro, AspectJ)

Spring的核心概念:
    把所有需要的类都放到spring的线程池中,用的时候直接拿出,不需要new对象
    BeanFactory
        (Student)getBean("");----Object
    1, IOC<Inversion of Control>, 控制反转:将对象的控制交给spring,由spring去管理。
        DI<Dependency Injection>, 依赖注入:自动将对象注入到其他类中的成员变量类中。
        通过IOC容器负责将依赖类进行创建, 拼接, 管理和获取。
        BeanFactory是Spring的核心接口, 由它来实现Spring容器的核心内容。
    2, AOP, 面向切面编程

搭建Spring环境
    ApplicationContext ac = new FileSystemXmlApplicationContext():用于指定电脑中的文件,一般不用
    ApplicationContext ac = new ClassPathXmlApplicationContext():客户端项目,一般多用这个;
    ApplicationContext ac = new WebApplicationContext():动态网页项目;

 三.通过spring进行属性注入

有三种注入方法:get/set方法注入;构造器(构造方法注入);接口注入(不常用);

代码示例:

先构建两个类:manager类和product类

spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="manager" class="model.Manager"><!-- 将对象放到spring容器中,交由spring管理 --><property name="ids" value="222"></property><!-- set注入,需要类中有严格的get/set方法,比较常用 --><property name="mname" value="管理员"></property></bean><bean id="manager2" class="model.Manager"><constructor-arg index="0" value="123"></constructor-arg><!-- 构造方法注入,以构造方法的索引注入,需要带参数的构造方法 --><constructor-arg index="1" value="管理员2"></constructor-arg></bean><bean id="manager3" class="model.Manager"><constructor-arg name="ids" value="123"></constructor-arg><!-- 第二种构造方法注入,需要空参构造方法 --><constructor-arg name="mname" value="管理员3"></constructor-arg></bean><bean id="manager4" class="model.Manager" p:ids="1234" p:mname="管理员4" ><!-- 当在namespaces中勾选p标记时可以使用这种方法,与set方法效果一样,比较常用 --><property name="plist"><!-- 一对多注入 --><list><!--也可以直接在list里写bean标签 --><ref bean="product"/><ref bean="product1"/></list></property></bean><bean id="product" class="model.Product"><property name="ids" value="222"></property><property name="pname" value="苹果"></property><property name="manager" ref="manager4"></property><!-- 一对一注入,ref指引用了另一个类 --><!-- <property name="manager" >第二种写法<ref bean="manager4"/></property> --></bean><bean id="product1" class="model.Product"><property name="ids" value="333"></property><property name="pname" value="香蕉"></property></bean>
</beans>

 JUnit test 类,用于测试程序

package Test;import static org.junit.jupiter.api.Assertions.*;import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;import model.Manager;
import model.Product;class JunitTest {private ClassPathXmlApplicationContext c;// 定义spring成员变量@BeforeEachvoid setUp() throws Exception {c = new ClassPathXmlApplicationContext("beans.xml");// 加载配置文件放到spring容器中,路径从src下开始写}@AfterEachvoid tearDown() throws Exception {c.close();// 用完关闭该容器}@Testvoid test() {Manager m = (Manager) c.getBean("manager");// 控制反转,通过spring容器获取该对象m.setIds(12);// 可通过set方法给类的成员变量赋值m.setMname("151");System.out.println(m);}}

 其他属性

<?xml version="1.0" encoding="UTF-8"?>
<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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"default-autowire="byName"><bean id="manager" class="model.Manager"><property name="ids" value="12"></property><property name="mname" value ="管理员"></property></bean><bean id="product" class="model.Product" autowire="byName"><!-- 自动装配,根据成员变量名去找bean的id,如果找到,自动添加; --><property name="ids" value="22"></property><property name="pname" value ="西瓜"></property></bean>
<!-- byType是根据class自动装配,default是根据beans标签里的属性值为准 -->
<!-- scope="singleton(单例) / prototype(原型)"//默认是单例,如果是原型则每次取都是不同的对象;-->
<!-- lazy-init="true" // 延迟加载,默认为false,如果设置为true则是在需要使用该对象时才去调用空参构造方法创建对象;-->
<!-- init-method="" destory-method=""//属性值为类里面的方法名,分别代表该对象初始化和销毁时调用的方法,这两个属性都不要与prototype一起使用,spring无法正确判断。-->
</beans>

 

转载于:https://www.cnblogs.com/wyc1991/p/9234876.html

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

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

相关文章

python while break try 无法中断_解码不能正常工作并且while循环不能正确中断python...

这是一个使用Python中的TCP套接字的文件传输应用程序。文件传输协议将包含一个名为ftps.py文件一个客户打电话来ftpc.py文件. 在文件传输应用程序将使用一个简单的协议。前4个字节(按网络字节顺序)将包含后续文件中的字节数。接下来的20个字节将包含文件的名称(假设名称可以容纳…

HTML中三种定位relative,absolute,fixed后,盒子的百分比宽度及位置易错点

1 . 相对定位relative:顾名思义,相对定位是相对于自己的位置来进行偏移,如下图: 以盒子中心为基准,为每条边的正方向,例: 向右移动20px :  代码为left:20px;或者right:-20px; 向下移动20px : 代码为top:20px;或者bottom:-20px; 2 . 绝对定位:absolute 以其第一个定位的…

JMeter定制功能实现

JMeter提供了可在采样器中使用的功能。 在编写复杂的测试计划时&#xff0c;您会感到JMeter缺少某些方法。 您使用Beanshell脚本定义自己的自定义方法。 JMeter调用Beanshell解释器来运行脚本。 只要您不产生高负载&#xff08;大量线程&#xff09;&#xff0c;此方法就可以正…

vue安装

1、查看版本 npm -v cnpm -v 升级 npm cnpm install npm -g 2、cnpm install vue 3、全局安装 vue-cli cnpm install --global vue-cli 4、创建一个基于webpack模板的新项目 vue init webpack my-project 5、运行项目 cd my-project cnpm install cnpm run dev 6、报错 解决办…

BZOJ.4516.[SDOI2016]生成魔咒(后缀自动机 map)

题目链接 后缀数组做法见这。 直接SAMmap。对于每个节点其产生的不同子串数为len[i]-len[fa[i]]。 //15932kb 676ms #include <map> #include <cstdio> #include <cctype> #include <algorithm> //#define gc() getchar() #define MAXIN 1500000 #de…

python运行结果图_[宜配屋]听图阁

首先使用内置模块os.>>> import os>>> code os.system("pwd && sleep 2")# /User/zhipeng>>> print code# 0问题是 os.system 只能获取到结束状态使用内置模块 subprocess>>> import subprocess>>> subproces…

母函数

首先是4个重要的泰勒展开式 1. 2. 3.(e(-x)e(x))/21x^2/2!x^4/4!x^6/6!...... 4.(e(x)-e(-x))/2xx^3/3!x^5/5!x^7/7!...... 之后是两类母函数的应用 总体思路&#xff1a;利用&#xff08;x^ax^bx^c&#xff09;指数表示对某一物品取用的数量&#xff0c;系数表示方案数 1.普通…

JDK 7的算法和数据结构

在定期检查JDK中是否存在一种或另一种标准算法时&#xff0c;我决定进行这种索引。 有趣的是&#xff0c;为什么其中包含一些著名的数据结构或算法&#xff0c;而另一些却没有&#xff1f; 此调查的格式仅涉及JDK的算法和数据结构的关键特性和功能&#xff0c;所有详细信息和完…

如何在本地运行查看github上的开源项目

看中了一款很多星星的github的项目&#xff0c;想把这个项目拉到自己的电脑上运行查看项目效果&#xff0c;该怎么做&#xff1f;示例&#xff1a;我们今天要看的 github项目地址&#xff1a;https://github.com/lzxb/vue-cnode1.克隆项目&#xff1a; git clone [https://gith…

box-shadow技巧分享

box-shadow box-shadow在定义里是这么说的&#xff1a;"box-shadow 属性向框添加一个或多个阴影。" 是的&#xff0c;和他的名字一样&#xff0c;这个属性固然是用来制造阴影效果让页面更有立体感的。 语法&#xff1a; box-shadow: h-shadow v-shadow blur sprea…

puppet enc mysql_精通Puppet配置管理工具

目  录第1章 开始使用Puppet11.1 什么是Puppet11.1.1 部署21.1.2 配置语言和资源抽象层31.1.3 事务层51.2 选择正确的Puppet版本51.3 我能混用Puppet的版本吗61.4 安装Puppet71.4.1 在Red Hat企业版Linux和Fedora上面安装Puppet71.4.2 在Debian和Ubuntu上安装Puppe…

Web测试实践——每日例会记录12.31(1)

姓名 主要负责部分 完成情况 储志峰 刘伟清 阶段一&#xff0c;软件评测。对华科软院和计院的网站展开对比分析&#xff0c;主要体现在功能、界面等方面。描述网站的缺陷。 √ 吕尚维 阶段二&#xff0c;用户调研。对使用华科软院网站的某个用户展开调研&#xff0c;采访…

Spring JPA数据+休眠+ MySQL + Maven

在Spring MVC的帮助下开发Web应用程序意味着要创建几个逻辑架构层。 层之一是DAO&#xff08;存储库&#xff09;层。 它负责与数据库进行通信。 如果您至少开发了DAO层一次&#xff0c;则应该知道它涉及许多样板代码。 Spring Data本身就是与DAO相关的日常工作的一部分。 在帖…

关于DJANGO MODELS的个人理解和RELATED_NAME的使用

转自&#xff1a;http://www.cnblogs.com/blogofwyl/p/4283513.html作为一个新人(刚刚大学还没有毕业就出来实习&#xff0c;可以说是真的什么都不知到&#xff0c;什么都要重新学&#xff0c;但是这样真的可以锻炼自己的意志力和能力)。现在在公司是前端和后端一起坐&#xff…

HTML的入门概念

超文本<a> 文本或图像都可以用作链接的标签。使用“..”可以连接到源文件的上层文件夹。“..”表示“父文件夹”。 <a href"目标网址#锚点" name"页面锚点名称" title"鼠标滑过显示的文本">链接显示的文本</a> <a href&…

PDF之pdfkit

说起pdf就想到了一款很适用的工具&#xff0c;那就是pdfkit&#xff0c;在前几天的项目中&#xff0c;有一个功能要实现&#xff0c;为了实现这一个功能&#xff0c;于是我大海茫茫中查询各种百科&#xff0c;不负众望的让我找到了我心怡的工具&#xff0c;想必也就是它了。好了…

015迭代器

注意迭代器和可迭代对象不同#迭代器&#xff1a;1、有iter方法&#xff0c;2、有next方法li[1,2,3,4,5]diter(li) # 等于li.__iter__()print(d) # <list_iteratorobjectat0x00000174316CC3C8>可以通过next方法取出元素。for循环就是这样的。for循环内部做的三件事1、调用…

CSS属性之attr()

attr()准确的说&#xff0c;不应该是一个属性&#xff0c;而是一个CSS的函数&#xff0c;我们先看看MDN上的介绍吧&#xff1a; Summary The attr() CSS function is used to retrieve the value of an attribute of the selected element and use it in the style sheet. It c…

番石榴15 –新功能

本月初发布了新版本的Guava库&#xff0c;其中包含一些新功能和改进。 以下是此版本中一些重要的API新增功能的概述&#xff1a; 1.逃脱者 Escapers使您可以“转义”字符串中的特殊字符&#xff0c;以使字符串符合特定格式。 例如&#xff0c;在XML中&#xff0c;必须将<字…

MySQL大小写敏感的解决方案

前言&#xff1a;对于MySQL的大小写敏感的影响&#xff0c;笔者在一个小项目中深刻的体会到&#xff1a;当想要查询一条数据时&#xff0c;总是出来两条或多条&#xff0c;后来发现是大小写敏感造成的原因&#xff0c;本文就该问题提出解决方案。 1.MySQL大小写敏感的控制 mysq…