spring介绍

  spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发复杂性而诞生的。

  简单来说spring是一个一站式轻量级开源框架。

  IOC:Inverse Of Control 反转控制 - 将我们创建对象的方式反转

    以前对象的创建以及依赖关系是我们开发人员自己维护-->使用spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入

    反转控制就是反转了对象的创建方式,从自己创建反转给了程序spring

  DI:Dependency Injection 依赖注入 - 实现IOC思想需要DI做支持

    注入方式:set、构造方法、属性字段 注入

    注入类型:值类型、引用类型(对象) 注入

spring框架搭建

  1.导包 5.0.6.RELEASE

    核心包:core 、 beans 、 context 、 expression

  2.创建一个User类

package com.david.bean;

public class User {
private String name;
private Integer age;
...
}

  3.新建配置文件 注册对象到spring容器 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--User对象交给spring容器管理 -->
<bean name="user" class="com.david.bean.User"></bean>
</beans>

  4.测试

        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
User u = (User) ac.getBean("user");
System.out.println(u);

BeanFactry接口(已过时)

  spring最原始接口,针对原始结构的实现类功能较为单一。此接口实现类的容器,特点是每次获得对象时才会创建对象。

ApplicationContext

  每次容器启动时就会创建容器中配置的所有对象,并提供更多功能。

   从类路径下加载配置文件:ClassPathXmlApplicationContext

  从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext

spring配置文件

    <!--bean元素:使用该元素描述需要spring容器管理的对象
name:给被管理的对象起个名字,获得对象时根据该名称获得
class:被管理对象的完整类名 名称可以重复,可以使用特殊字符
id:早期使用,与name属性一模一样,名称不可重复,不能使用特殊字符/
-->
<bean name="user" class="com.david.bean.User"></bean>
    <!--scope元素:
singleton(默认):单例对象 在spring容器中只会存在一个实例
prototype:多例原型 每次在获得时才会创建并且每次都是新的对象
request:web环境下 对象与request生命周期一致 每次请求完就会从spring中移除(了解)
session:web环境下 对象与session生命周期一致 一次会话内有效(了解)-->
<bean name="user" class="com.david.bean.User" scope=""></bean>

在与struts2结合时,spring用来存aciton,scope需要声明为prototype多例模式 ,因为每次请求action 都是新的

生命周期属性: 配置一个init-method方法作为生命周期初始化方法,spring会在对象创建后立即调用。

        配置一个destroy-method方法作为生命周期的销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用。

<bean name="user" class="com.david.bean.User" init-method="init" destroy-method="destroy"></bean>

模块化配置

    <!--可以导入其他spring配置文件 -->
<import resource="com/david/spring/applicationContext.xml"></import>

创建对象的方式

    <bean name="user" class="com.david.bean.User"></bean>
<!--创建方式2:静态工厂创建(了解)-->
<bean name="user2" class="com.david.bean.UserFactory" factory-method="createUser"></bean>
<!--创建方式3:实例工厂创建(了解)-->
<bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean>
<bean name="userFactory" class="com.david.bean.UserFactory"></bean>
        //方式1:空参构造函数
User u = (User) ac.getBean("user");
System.out.println(u); //方式2:静态工厂
User u1 = (User) ac.getBean("user2");
System.out.println(u1); //方式3:实例工厂
User u2 = (User) ac.getBean("user3");
System.out.println(u2);
public class UserFactory {
public static User createUser(){
return new User();
}
public User createUser2(){
return new User();
}
}

属性注入

  1.set方法注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="user" class="com.david.bean.User">
<!--值类型注入 -->
<property name="name" value="david"></property>
<property name="age" value="27"></property> <!--引用类型(对象)注入 -->
<property name="car" ref="car"></property>
</bean> <bean name="car" class="com.david.bean.Car">
<property name="name" value="奥拓"></property>
<property name="color" value="Black"></property>
</bean>
</beans>
package com.david.bean;

public class User {
private String name;
private Integer age;
private Car car; ...
}
package com.david.bean;

public class Car {
private String name;
private String color; ...
}

  2.构造函数注入

    <!--构造函数注入 -->
<bean name="car" class="com.david.bean.Car">
<constructor-arg name="name" value="奥拓"></constructor-arg>
<constructor-arg name="color" value="red"></constructor-arg>
</bean>

还可以通过在constructor-arg元素中 添加index属性 来指定当前是第几个参数 type指定数据类型

  3.p名称空间注入(了解)

    <!--导入p名称空间 xmlns:p="http://www.springframework.org/schema/p" -->
<bean name="user" class="com.david.bean.User" p:name="david" p:age="27" p:car-ref="car"></bean>

  4.spel注入(了解)

    <!--spel注入:spring Expression Language spring表达式语言 -->
<bean name="user" class="com.david.bean.User">
<property name="name" value="${user.name}"></property>
<property name="age" value="${user.age}"></property>
<property name="car" ref="car"></property>
</bean>

复杂类型注入

package com.david.bean;

import java.util.List;
import java.util.Map;
import java.util.Properties; public class CollectionBean {
private Object[] arr; //数组注入
private List list;//list/set注入
private Map map;//map注入
private Properties prop; //properties注入
...
}
<bean name="cb" class="com.david.bean.CollectionBean">

        <property name="arr">
<array>
<value>tom</value>
<value>jerry</value>
<ref bean="user"></ref>
</array>
</property> <property name="list">
<list>
<value>abc</value>
<value>efe</value>
</list>
</property> <property name="map">
<map>
<entry key="name" value="tom"></entry>
<entry key="age" value="18"></entry>
</map>
</property> <property name="prop">
<props>
<prop key="name">tom</prop>
<prop key="age">18</prop>
</props>
</property> </bean>

spring框架搭建(一)的更多相关文章

  1. spring框架搭建url

    MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 http://blog.csdn.net/zhshulin/article/details/30779873 MyEclipse下 ...

  2. Spring框架搭建遇到的问题汇总

    1.The resource is not on the build path of a Java project 然后把相应的依赖加入构建路径 2.Type mismatch: cannot con ...

  3. Spring框架学习-搭建第一个Spring项目

    步骤一:下载Spring开发包. 官网:https://spring.io/           下载地址:https://repo.spring.io/libs-release-local/org/ ...

  4. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  5. 【Spring】浅析Spring框架的搭建

    c目录结构: // contents structure [-] Spring是什么 搭建Spring框架 简单Demo 1,建立User类 2,建立Test类 3,建立ApplicationCont ...

  6. Spring MVC + jpa框架搭建,及全面分析

    一,hibernate与jpa的关系 首先明确一点jpa是什么?以前我就搞不清楚jpa和hibernate的关系. 1,JPA(Java Persistence API)是Sun官方提出的Java持久 ...

  7. 记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障

    搭建了一个新框架,使用了spring boot 替换以简化原来繁杂的spring配置,使用Spring注解管理事务,持久层使用mybatis. 连接mysql数据库完成项目的过程中发现不支持事务,因为 ...

  8. SSM框架搭建web服务器实现登录功能(Spring+SpringMVC+Mybatis)

    初学java EE,虽然知道使用框架会使开发更加便捷高效,但是对于初学者来说,感到使用框架比较迷惑,尤其是各种jar包的引用.各种框架的配置.注解的使用等等. 最好的学习方法就是实践,于是下载了一个现 ...

  9. struts2+hibernate+spring注解版框架搭建以及简单测试(方便脑补)

    为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->M ...

随机推荐

  1. UpLoadify在IE下兼容问题

    一.在IE9.IE10不能点击的问题解决 解决方法:进入uploadify的js文件中,搜索SWFUpload.prototype.getFlashHTML,找到它对应的语句,将方法全部替换为以下内容 ...

  2. DOCKER - 容器抓包

    https://help.aliyun.com/knowledge_detail/40564.html?spm=a2c4e.11153940.blogcont272172.10.b09e28a6AOd ...

  3. linq 升序排序 空值放后面并根据另一个字段进行多重排序

    List<PickingInfo> res = GetDatas(); var _d = (from e in res select new { aa = e.pickingLibrary ...

  4. js 随机数范围

    Math.floor(Math.random()*(high-low+1) +low)

  5. nexus3的安装和使用

    参考:https://www.cnblogs.com/2YSP/p/9533506.html http://www.54tianzhisheng.cn/2017/10/14/Nexus3-Maven/ ...

  6. Django-----中间件Cookie

    Cookie: 用来跟踪用户的会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. Cookie机制 ...

  7. 美团 CodeM 复赛」城市网络

    美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 11 ...

  8. J - Simpsons’ Hidden Talents

    Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marg ...

  9. [bzoj2060][Usaco2010 Nov]Visiting Cows 拜访奶牛_树形dp

    Visiting Cows 拜访奶牛 bzoj-2060 Usaco-2010 Nov 题目大意:题目链接. 注释:略. 想法:看起来像支配集. 只是看起来像而已. 状态:dp[pos][flag]表 ...

  10. Sunnypig闯三角关

    背景 贪玩的sunnypig请Charles为他打造一个奇幻世界,Charles欣然答应了.然而一向善于出难题的Charles是决不会轻易让sunnypig轻松拥有一个奇幻世界的,于是Charles在 ...