1.概述

1.1.简介

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。

提供了展现层 SpringMVC和持久层 Spring JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架

1.2.优势

  • 方便解耦,简化java开发
  • aop编程支持
  • 声明式事务支持
  • 方便程序测试

2.快速入门

2.1.导入spring开发包坐标

<dependencies>
<!-- spring基本包,包含core,beans,aop-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--spring测试整合包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- aspectj的织入,AOP开发需要 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
</dependencies>

2.2.创建spring核心配置文件

  • 一般创建在resources目录下,文件名为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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

2.3.创建java类

public class A{}

2.4.在spring配置文件中配置被管理的bean

<bean id="classA" class="A"></bean>

2.5.使用spring api获取bean实例

public class MyTest {
@Test
public void t01(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
A a = context.getBean(A.class);
System.out.println(a!=null);
}
}

3.使用xml装配bean

3.1.bean标签

作用: 用于配置对象由spring创建,默认使用无参构造.

属性:

  * id,bean实例在spring容器中唯一标识

  * class,bean全限定类名

  * scope,指定该实例的作用范围

  * init-method,指定bean实例化后执行的方法,值为bean类中方法名

  * dmestroy-method,指定bean销毁前执行的方法

scope属性取值:

  * singleton,默认值,单例模式,spring容器创建时实例化bean,存活至spring容器销毁.

  * prototypem,多例模式,每次调用getBean()都会实例化bean,使用时存货,长时间不使用由java垃圾回收器回收

  * request,在web项目中,每被请求一次实例化一次,放入request域中

  * session

  * global session

3.2.bean实例化配置

3.2.1.java

public class A {}
class AFactory{
// 静态方法返回bean
public static A getA1(){
return new A();
}
// 非静态方法返回bean
public A getA2(){
return new A();
}
}

3.2.2.spring配置

a.无参构造实例化

<bean id="a1" class="A"/>

b.工厂静态方法实例化

<bean id="a2" factory-method="getA1" class="AFactory"/>

c.工厂实例方法实例化

<bean id="afactory" class="AFactory"/>
<bean id="a3" factory-bean="afactory" factory-method="getA2"/>

3.3.bean依赖注入配置

3.3.1.有参构造

a.注入基本类型和string

<bean id="" class="">
<!-- name:构造方法形参的名字 value:要注入的值 -->
<constructor-arg name="" value=""/>
</bean>

b.注入bean类型

<bean id="" class="">
<!-- name:构造方法形参的名字 ref:bean实例id -->
<constructor-arg name="" ref=""></constructor-arg>
</bean>

c.注入list<String>

<bean id="" class="">
<!-- name:构造方法形参的名字 -->
<constructor-arg name="">
<list>
<value>张三</value>
<value>李四</value>
</list>
</constructor-arg>
</bean>

d.注入list<bean>

<bean id="" class="">
<!-- name:构造方法形参的名字 -->
<constructor-arg name="">
<list>
<!-- ref 指定容器中的bean实例-->
<ref bean=""></ref>
<!-- bean 新建一个bean -->
<bean class=""></bean>
</list>
</constructor-arg>
</bean>

e.注入map<string,string>

<bean id="" class="">
<constructor-arg name="map">
<map>
<!-- key注入键 value注入值 -->
<entry key="张三" value="25"></entry>
<entry key="李四" value="19"></entry>
</map>
</constructor-arg>
</bean>

f.注入map<string,bean>

<bean id="b4" class="B">
<constructor-arg name="map">
<map>
<!-- key注入键 value-ref指定bean实例id -->
<entry key="张三" value-ref=""></entry>
<entry key="李四" value-ref=""></entry>
</map>
</constructor-arg>
</bean>

3.3.2.set方法

a.注入基本类型和string类型

<bean id="" class="">
<!-- name:set方法名 value:注入的值-->
<property name="" value=""/>
</bean>

b.注入bean

<bean id="" class="">
<!-- name:set方法名 ref:指定bean实例id-->
<property name="a" ref="a1"></property>
</bean>

c.注入list<string>

<bean id="" class="">
<!-- name set方法名-->
<property name="">
<list>
<value>str1</value>
<value>str2</value>
</list>
</property>
</bean>

d.其他集合参考3.3.1

3.3.3.p名称空间

  • 本质是调用set方法
  • 使用前需要引入约束
xmlns:p="http://www.springframework.org/schema/p"

a.注入基本类型和string

<bean id="" class="" p:[set方法名]="值" ></bean>

b.注入bean

<bean id="" class="" p:[set方法名]-ref="bean实例id" ></bean>

3.4.引入其他配置

  • 实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载
<import resource="applicationContext-xxx.xml"/>

3.5.引入资源文件

a.引入properties文件

<context:property-placeholder location="classpath:xxx.properties"/>

b.在配置文件获取值.格式:${key}

<property name="username" value="${key}">

4.使用注解装配bean

4.1.在java代码中使用注解

注解 说明
@Component 实例化Bean,使用在类上,默认id为类名首字母小写
@Controller 实例化Bean,使用在web层类上
@Service 实例化Bean,使用在service层类上
@Repository 实例化Bean,使用在dao层类上
@Autowired 依赖注入,使用在字段上根据类型注入
@Qualifier 依赖注入,结合@Autowired一起使用根据id注入
@Resource 依赖注入,相当于@Autowired+@Qualifier
@Value 依赖注入,注入普通属性
@Scope 标注Bean的作用范围
@PostConstruct 使用在方法上标注该方法是Bean的初始化方法
@PreDestroy 使用在方法上标注该方法是Bean的销毁方法

4.2.开启注解扫描

<context:component-scan base-package="要扫描的包"></context:component-scan>

5.javabean+注解代替xml配置

注解 说明
@Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
@ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。作用等于 Spring 的 xml 配置文件中的 <context:component-scan/>
@Bean 使用在方法上,标注将该方法的返回值存储到Spring容器中,id为方法名
@PropertySource 用于加载.properties 文件中的配置
@Import 用于导入其他配置类

6.spring相关api

  • 读取xml配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("xmlconfig.xml");
  • 读取javaConfig
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(javaconfig.class);
  • getBen()
// 根据id获取bean需要强转类型
applicationContext.getBean("");
// 根据class获取bean不用强转类型,但该类在容器中需是单例的
applicationContext.getBean(javabean.class);

spring入门1-IOC和DI的更多相关文章

  1. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...

  2. Spring入门2. IoC中装配Bean

    Spring入门2. IoC中装配Bean 20131125 前言: 上一节学习了Spring在JavaProject中的配置,通过配置文件利用BeanFactory和ApplicationConte ...

  3. Spring入门1. IoC入门实例

    Spring入门1. IoC入门实例 Reference:Java EE轻量级解决方案——S2SH 前言: 之前学习过关于Spring的一点知识,曾经因为配置出现问题,而总是被迫放弃学习这些框架技术, ...

  4. Spring核心思想——IOC和DI

    基本概念 IOC是什么?     IOC(Inversion of Control)控制反转,IOC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式. IOC解决了什么问题?      ...

  5. Spring MVC -- Spring框架入门(IoC和DI)

    Spring MVC是Spring框架中用于Web应用开发的一个模块.Spring MVC的MVC是Model-View-Controller的缩写.它是一个广泛应用于图像化用户交互开发中的设计模式, ...

  6. Spring入门导读——IoC和AOP

    和MyBatis系列不同的是,在正式开始Spring入门时,我们先来了解两个关于Spring核心的概念,IoC(Inverse of Control)控制反转和AOP()面向切面编程. 1.IoC(I ...

  7. Spring入门及IoC的概念

    Spring入门 Spring是一个轻量级的Java开发框架,最早由Robd Johnson创建,目的为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,它是一个分层的JavaSE/EE轻量级开源 ...

  8. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  9. spring.net中间IoC、DI和MVC

    轮廓 spring.net它是开源的业务层框架,功能很强大,它归结到什么都有3能:面向切面编程:IoC和DI:提供综合型的框架支持,本片博客主要说一下IoC和DI.和其提供的对MVC框架的支持. Io ...

  10. Spring自学教程-IOC、DI、AOP(二)

    一.spring的IOC-就是怎样使用spring来创建对象 二.springDI(依赖注入)-就是怎样给属性赋值 通过set方式赋值 以下我们只需要记住两点的赋值,基本类型和引用类型的赋值 基本类型 ...

随机推荐

  1. java JNI介绍

    java JNI介绍 目录 java JNI介绍 1. Java调用C++代码 2.C++代码调用java代码 JNI是Java Native Interface的全称. oracle文档中是这样描述 ...

  2. docker 部署mysql连接问题

    发现windows上有一个docker descktop(虽然不怎么好用), 安装之后准备直接用docker搭本地测试环境的基础设施(比如MySQL,Redis,MongoDB,ES啥的), 虽然比去 ...

  3. noip19

    sb\(O(n^{2})\)传参 T1 暴力一会儿就码好,结果.. 祭奠一下死去的代码 died #include<cstdio> #define MAX 1010 #define re ...

  4. NOIP 模拟 $15\; \rm \text{玫瑰花精}$

    题解 \(by\;zj\varphi\) 一道线段树题目 这道题可以通过维护一棵线段树,线段树上的每个节点维护 \(\rm l,r,len,p\) 分别表示这段区间最左边的花精,最右边的花精,被两只花 ...

  5. 使用npm安装 Ant Design Vue 时报错—ant-design-vue@latest(sha1-qsf / gCIFcRYxyGmOKgx7TmHf1z4 =)seems to be corrupted.

    安装 Ant Design Vue 时报错: npm install ant-design-vue --save ant-design-vue @ latest(sha1-qsf / gCIFcRYx ...

  6. mysql删除大表更快的办法

    实现:巧用LINK(硬链接),原理:linux文件系统中硬链接相当于文件的入口,记录着ionde的信息.一个文件存在多个硬连接时,删除一个硬链接不会真正的删除ionde(存储文件的数据) # 创建硬链 ...

  7. UWP App Data存储和获取

    这篇博客介绍如何在UWP开发时,如何存储App Data和获取. App Data是指用户的一些设定,偏好等.例如,App的主题,是否接收推送,离线接收消息等.需要区分下App Data和User D ...

  8. 这样设计 Java 异常更优雅

    转自:lrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经 ...

  9. JavaWeb之文件上传、下载

    时间:2016-12-17 18:07 --文件上传概述上传不能使用BaseServlet1.文件上传的作用    例如网络硬盘,就是用来上传和下载文件的.2.文件上传对表单的限制    1)必须使用 ...

  10. 前端 | 页面触底自动加载 Vue 组件

    不管是 web 端还是移动端,信息流都是现在很流行的信息展示方式.信息流经常搭配自动加载一起使用以获得更好的使用体验. 最近在使用 Vue 开发过程中也遇到了首页信息流自动加载的需求.大致了解了一下几 ...