Spring框架学习(一)
来源:互联网 发布:域名怎么和空间绑定 编辑:程序博客网 时间:2024/06/08 16:05
大概内容:
1.Spring框架的介绍
2.Spring容器(IOC控制反转)
3.Spring容器的简单演示
Spring框架介绍
spring是JavaEE的应用程序框架,也是以IOC和AOP为核心的轻量级容器框架,能够对JavaBean的生命周期进行管理;spring框架可以单独使用,也可以和struts、hibernate等组合使用。
spring框架架构:
Spring框架的优缺点:
优点:
1.轻量级的容器框架,没有侵入性
2.通过Spring容器更加容易组合对象之间的关系,面向接口编程,降低耦合
3.AOP技术更好的进行功能扩展,遵循OCP开发原则
缺点:业务功能比较依赖Spring特有的功能和Spring环境
Spring容器(IOC控制反转)
Spring容器是Spring框架最基础的部分,通过依赖注入(DI,也叫控制反转IOC)来实现对JavaBean的管理,其中一个最基本的概念——–BeanFactory是任何Spring应用的核心,也是工厂模式的一个实现,它使用IOC将应用配置和依赖说明从实际的应用代码中分离出来,使各个层次的代码不再具有绝对的依赖性,实现一定程度上的解耦。
在实际项目中,Spring容器其实就是配置一个xml文件(文件名一般用applicationContext.xml,一般位置放在和src下面的地方,这里都是以Java项目为基础),在此之前先需要写一个JavaBean的类Person:
//Person.java/* * Spring中的JavaBean类尽量都写成标准形式:set和get方法、空参构造方法 */public class Person { private String name; private Integer age; public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }}
<!-- aaplicationContext.xml --><?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd "> <!-- singleton表示单例,即每次都是拿到同一个实例,默认为singleton --> <bean id="p1" class="cn.hncu.domain.Person" scope=" singleton"> <property name="name" value="Jack"></property> <property name="age" value="22"></property> </bean> <!-- prototype为原型作用域,即每次创建的是一个新对象 --> <bean id="p2" class="cn.hncu.domain.Person" scope="prototype"> <property name="name" value="Rose"></property> <property name="age" value="25"></property> </bean></beans>
我对Spring容器的理解:可以说就是一个工厂,在整个项目中所有需要以及可能用到的实例对象,都能通过Spring来帮我们完成创建对象的工作,而我们只需要直接拿过来用就行了,这样做的很大好处就是类和类之间的依赖关系没那么强了,降低了耦合性。
IOC(Inversion of Control):控制反转的基本概念是不直接创建对象,通过在Xml配置文件中描述创建Bean的方式,在需要使用到Bean是,再通过依赖注入(DI)对属性进行赋值。
Spring中注入有三种方式:set注入、接口注入、构造注入,其中接口注入和构造注入不常使用,这里就只演示set注入:
<bean id="user" class="cn.hncu.demo1.Person"> <property name="pname" value="Tom"> </property> <property name="page" value="21"> </property></bean>
Spring中Bean的作用域有四种:即singleton(单例)、prototype(多实例)、request、session四种。
1.singleton表示单例,即在Spring容器中共享一个Bean实例,并且所有对Bean的请求,只要id和该Bean定义相匹配,拿到的都是同一个Bean实例。
2.prototype表示多实例,即一个Bean对应多个实例,每一次请求都会拿到一个新的Bean实例
3.request表示每次请求都会拿到新的Bean实例,同时该Bean实例仅在当前HTTPRequest中有效
4.session表示每次请求都会拿到一个新的Bean实例,同时该Bean实例仅在当前HTTPSession中有效
Spring容器的简单演示(Java项目中演示)
1.创建好JavaBean的类
//User.javaimport java.util.Arrays;import java.util.List;import java.util.Map;import java.util.Set;public class User { private String name; private Integer age; private Cat cat; private List<String> addrs; private Map<String,Object> map; private Set<String> set; private Object[] objs; public User() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Cat getCat() { return cat; } public void setCat(Cat cat) { this.cat = cat; } public List<String> getAddrs() { return addrs; } public void setAddrs(List<String> addrs) { this.addrs = addrs; } public Map<String, Object> getMap() { return map; } public void setMap(Map<String, Object> map) { this.map = map; } public Set<String> getSet() { return set; } public void setSet(Set<String> set) { this.set = set; } public Object[] getObjs() { return objs; } public void setObjs(Object[] objs) { this.objs = objs; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", cat=" + cat + ", addrs=" + addrs + ", map=" + map + ", set=" + set + ", objs=" + Arrays.toString(objs) + "]"; }}//Cat.javapublic class Cat { private String name; private String hobby; public Cat() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } @Override public String toString() { return "Cat [name=" + name + ", hobby=" + hobby + "]"; }}
2.配置文件
<!-- applicationContext.xml --><?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd "> <!-- 注意,所有bean要尽量写标准的形式,要有空参构造,setter-getter方法 --> <!-- 导入其它xml配置文件 --> <import resource="cat.xml"/> <bean id="user" class="cn.hncu.demo2.User"> <property name="name" value="Jack"></property> <property name="age" value="23"></property> <!-- 属性变量是一个bean,ref表示引用已经定义好的cat1 --> <property name="cat" ref="cat1"></property> <!-- 属性变量是一个List --> <property name="addrs"> <list> <value>益阳</value> <value>上海</value> <value>北京</value> <value>天上</value> </list> </property> <!-- 属性变量是一个Map --> <property name="map"> <map> <entry key="name" value="Mike" /> <entry key="age" value="20" /> </map> </property> <!-- 属性变量是一个Set --> <property name="set"> <set> <value>111</value> <value>222</value> <value>333</value> </set> </property> <!-- 属性变量是一个Object[], 集合嵌套 --> <property name="objs"> <array> <value>字符串</value> <!-- 引用外部bean --> <ref bean="cat2"/> <!-- 内部匿名bean --> <bean class="cn.hncu.demo2.Cat"> <property name="name" value="灰太狼"></property> <property name="hobby" value="抓羊"></property> </bean> <list> <value>element1</value> <value>element2</value> <value>element3</value> </list> </array> </property> </bean></beans>-----------------------------------------------------------------<!-- cat.xml --><?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd "> <bean id="cat1" class="cn.hncu.demo2.Cat"> <property name="name" value="Tom"></property> <property name="hobby" value="fish"></property> </bean> <bean id="cat2" class="cn.hncu.demo2.Cat"> <property name="name" value="Rose"></property> <property name="hobby" value="singing"></property> </bean></beans>
3.通过配置文件读取Bean
注意:Spring 框架需要我们手动去导包,否则项目无法编译成功,直接报错,关于Spring包可以去网上下载,这就不展示了。因为Spring的包比较多,我们可以按需进行导包,此处演示需要导的包如下:
import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Demo2 { @Test public void demo(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("cn/hncu/demo2/demo2.xml");//配置文件的位置 User user = ctx.getBean("user", User.class); System.out.println(user); }}
4.运行结果
总结:简单的了解了一下Spring框架、IOC技术以及演示了Spring容器,这些都是Spring的基础的知识点,其中IOC容器是Spring的两大核心技术之一。
- spring框架学习(一)
- Spring框架学习(一)
- Spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- Spring框架学习(一)
- spring框架学习(一)
- Spring框架学习(一)
- spring框架学习(一)
- spring框架学习(一)
- 微信公众平台 redirect_uri参数错误解决方法
- Spring获取bean的几种方式
- ARM NEON 编程系列7——NEON gcc编译器intrinsics函数对应的汇编指令
- Multi-university 第九场 经验总结
- 排序算法C++&&Python实现---基数排序
- Spring框架学习(一)
- 网络营销实战课-微信实操
- 一个DOM操作的题目
- 排序算法练习
- Material Design整理(三)——ToolBar
- 《大道至简》读后感
- 浅解多线程
- 5 树
- Vue实现组件信息的缓存